Fix for second logic bug when handing oplock breaks and client messages
authorJeremy Allison <jra@samba.org>
Mon, 10 Sep 2001 23:03:14 +0000 (23:03 +0000)
committerJeremy Allison <jra@samba.org>
Mon, 10 Sep 2001 23:03:14 +0000 (23:03 +0000)
simultaneously.
Jeremy.
(This used to be commit 227325b2d63dad55cbcda9608fba676fb6ce5584)

source3/smbd/process.c

index 9f23c7d3be99016b79884506db61572f237cc43a..bf9e6457afc7a36fff22a37991eaaa87ddea758e 100644 (file)
@@ -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);