]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
Reduce the race condition in Samba4 in RAW-RENAME test. We rename a file
authorJeremy Allison <jra@samba.org>
Mon, 31 Mar 2008 23:46:20 +0000 (16:46 -0700)
committerJeremy Allison <jra@samba.org>
Mon, 31 Mar 2008 23:46:20 +0000 (16:46 -0700)
using trans2 setfileinfo on one connection, and then check the
file name has changed on the other. In Samba we achieve this by
sending a local message to the other process. This change causes
us to re-scan for incoming messages after we've woken up from the
select (which is cheap if there are no pending messages). This reduces
the race significantly. Volker please review.
Jeremy.

source/smbd/process.c

index 9c01bbaa4a86619edab2e6a82a37f60984eabc83..03216a0700154582bcc0ad75b59da5ea1292ad44 100644 (file)
@@ -853,6 +853,15 @@ 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