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.
Reviewed-on: http://gerrit.openafs.org/4028
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
(cherry picked from commit
63fb786c541926dbf03a9452288c6a938c7cd6c4)
Change-Id: Icacbea85a7d1bcb8df538d07ee47de1193826cdc
Reviewed-on: http://gerrit.openafs.org/4180
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
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)