rx: Reset fd_set in LWP rxi_Sendmsg
authorAndrew Deason <adeason@sinenomine.net>
Mon, 21 Feb 2011 18:39:48 +0000 (12:39 -0600)
committerJeffrey Altman <jaltman@openafs.org>
Tue, 22 Feb 2011 04:38:20 +0000 (20:38 -0800)
When we select() on the socket fd in rxi_Sendmsg, we do not reset the
fd_set, and just use the same memory for any necessary subsequent
select()s. However, if the select returned on EINTR, the fd_set may be
cleared, and so we may try to select() on an empty fd_set forever. To
be sure that we don't do that, reset the fd_set to the socket fd every
time.

Change-Id: I5273351c70e593ad1b7849f4f56de1fcb12d1bbf
Reviewed-on: http://gerrit.openafs.org/4028
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>

src/rx/rx_lwp.c

index acf2677..8ad021b 100644 (file)
@@ -482,6 +482,8 @@ rxi_Sendmsg(osi_socket socket, struct msghdr *msg_p, int flags)
        while ((err = select(socket + 1, 0, sfds, 0, 0)) != 1) {
            if (err >= 0 || errno != EINTR)
                osi_Panic("rxi_sendmsg: select error %d.%d", err, errno);
+           FD_ZERO(sfds);
+           FD_SET(socket, sfds);
        }
     }
     if (sfds)