Add runtime tests for "impossible" case with -DDEVELOPER. Trying to catch logic
authorJeremy Allison <jra@samba.org>
Tue, 22 Apr 2003 17:30:53 +0000 (17:30 +0000)
committerJeremy Allison <jra@samba.org>
Tue, 22 Apr 2003 17:30:53 +0000 (17:30 +0000)
error on Linux.
Jeremy.

source/smbd/open.c

index 6b3dcbe71b4b287523f288b6e5c1f0e317ef4fb1..5e4f3caca7411b6a939b6ec95783a012c05ee5a8 100644 (file)
@@ -532,6 +532,29 @@ existing desired access (0x%x).\n", fname, (unsigned int)desired_access, (unsign
        return True;
 }
 
+
+#if defined(DEVELOPER)
+static void validate_my_share_entries(share_mode_entry *share_entry)
+{
+       files_struct *fsp;
+
+       if (share_entry->pid != sys_getpid())
+               return;
+
+       fsp = file_find_dif(share_entry->dev, share_entry->inode, share_entry->share_file_id);
+       if (!fsp) {
+               smb_panic("validate_my_share_entries: Cannot match a share entry with an open file\n");
+       }
+
+       if (((uint16)fsp->oplock_type) != share_entry->op_type) {
+               pstring str;
+               slprintf(str, sizeof(str)-1, "validate_my_share_entries: file %s, oplock_type = 0x%x, op_type = 0x%x\n",
+                               fsp->fsp_name, (unsigned int)fsp->oplock_type, (unsigned int)share_entry->op_type );
+               smb_panic(str);
+       }
+}
+#endif
+
 /****************************************************************************
  Deal with open deny mode and oplock break processing.
  Invarient: Share mode must be locked on entry and exit.
@@ -572,6 +595,10 @@ static int open_mode_check(connection_struct *conn, const char *fname, SMB_DEV_T
                for(i = 0; i < num_share_modes; i++) {
                        share_mode_entry *share_entry = &old_shares[i];
                        
+#if defined(DEVELOPER)
+                       validate_my_share_entries(share_entry);
+#endif
+
                        /* 
                         * By observation of NetBench, oplocks are broken *before* share
                         * modes are checked. This allows a file to be closed by the client