Move the message_dispatch() call after the check for errno on
authorJeremy Allison <jra@samba.org>
Mon, 31 Mar 2008 23:56:21 +0000 (16:56 -0700)
committerJeremy Allison <jra@samba.org>
Mon, 31 Mar 2008 23:56:21 +0000 (16:56 -0700)
the select return. We don't want the call to message_dispatch
to mess up the errno value.
Jeremy.

source/smbd/process.c

index 03216a0700154582bcc0ad75b59da5ea1292ad44..9aa775d0f67d6ada2bb2f3266a56abe0b10fbc2e 100644 (file)
@@ -853,15 +853,6 @@ static NTSTATUS receive_message_or_smb(TALLOC_CTX *mem_ctx, char **buffer,
                goto again;
        }
 
-       /*
-        * We've just woken up from a protentially long select sleep.
-        * Ensure we process local messages as we need to synchronously
-        * process any messages from other smbd's to avoid file rename race
-        * conditions. This call is cheap if there are no messages waiting.
-        * JRA.
-        */
-       message_dispatch(smbd_messaging_context());
-
        /* if we get EINTR then maybe we have received an oplock
           signal - treat this as select returning 1. This is ugly, but
           is the best we can do until the oplock code knows more about
@@ -880,8 +871,17 @@ static NTSTATUS receive_message_or_smb(TALLOC_CTX *mem_ctx, char **buffer,
        if (selrtn == -1) {
                /* something is wrong. Maybe the socket is dead? */
                return map_nt_error_from_unix(errno);
-       } 
-    
+       }
+
+       /*
+        * We've just woken up from a protentially long select sleep.
+        * Ensure we process local messages as we need to synchronously
+        * process any messages from other smbd's to avoid file rename race
+        * conditions. This call is cheap if there are no messages waiting.
+        * JRA.
+        */
+       message_dispatch(smbd_messaging_context());
+
        /* Did we timeout ? */
        if (selrtn == 0) {
                return NT_STATUS_IO_TIMEOUT;