diff options
author | Jeremy Allison <jra@samba.org> | 2001-09-10 23:03:14 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2001-09-10 23:03:14 +0000 |
commit | 227325b2d63dad55cbcda9608fba676fb6ce5584 (patch) | |
tree | be1a6cc861223a0a9f4ce456c94267d9ff3d15ba /source/smbd/process.c | |
parent | 70bd17473a2106ef41b5d921595ce537ec1871cb (diff) | |
download | samba-227325b2d63dad55cbcda9608fba676fb6ce5584.tar.gz samba-227325b2d63dad55cbcda9608fba676fb6ce5584.tar.xz samba-227325b2d63dad55cbcda9608fba676fb6ce5584.zip |
Fix for second logic bug when handing oplock breaks and client messages
simultaneously.
Jeremy.
Diffstat (limited to 'source/smbd/process.c')
-rw-r--r-- | source/smbd/process.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/source/smbd/process.c b/source/smbd/process.c index 9f23c7d3be9..bf9e6457afc 100644 --- a/source/smbd/process.c +++ b/source/smbd/process.c @@ -207,6 +207,11 @@ static BOOL receive_message_or_smb(char *buffer, int buffer_len, int timeout) signals */ if (selrtn == -1 && errno == EINTR) { async_processing(&fds, buffer, buffer_len); + /* + * After async processing we must go and do the select again, as + * the state of the flag in fds for the server file descriptor is + * indeterminate - we may have done I/O on it in the oplock processing. JRA. + */ goto again; } @@ -231,7 +236,12 @@ static BOOL receive_message_or_smb(char *buffer, int buffer_len, int timeout) if (oplock_message_waiting(&fds)) { async_processing(&fds, buffer, buffer_len); - if (!FD_ISSET(smbd_server_fd(),&fds)) goto again; + /* + * After async processing we must go and do the select again, as + * the state of the flag in fds for the server file descriptor is + * indeterminate - we may have done I/O on it in the oplock processing. JRA. + */ + goto again; } return receive_smb(smbd_server_fd(), buffer, 0); |