Fix defer_open() fuction in the open code path to cope with a NULL lck parameter.
authorJeremy Allison <jra@samba.org>
Fri, 29 Jun 2012 19:56:57 +0000 (12:56 -0700)
committerJeremy Allison <jra@samba.org>
Sat, 30 Jun 2012 00:23:39 +0000 (02:23 +0200)
source3/smbd/open.c

index f259cc99ec07575a380debb7b3a42f9906838a38..c6d2f63b148d805415a65fca7f5ce934bb62bd24 100644 (file)
@@ -1355,20 +1355,23 @@ static void defer_open(struct share_mode_lock *lck,
                       struct deferred_open_record *state)
 {
        struct server_id self = messaging_server_id(req->sconn->msg_ctx);
-       int i;
 
        /* Paranoia check */
 
-       for (i=0; i<lck->data->num_share_modes; i++) {
-               struct share_mode_entry *e = &lck->data->share_modes[i];
+       if (lck) {
+               int i;
+
+               for (i=0; i<lck->data->num_share_modes; i++) {
+                       struct share_mode_entry *e = &lck->data->share_modes[i];
 
-               if (is_deferred_open_entry(e) &&
-                   serverid_equal(&self, &e->pid) &&
-                   (e->op_mid == req->mid)) {
-                       DEBUG(0, ("Trying to defer an already deferred "
-                               "request: mid=%llu, exiting\n",
-                               (unsigned long long)req->mid));
-                       exit_server("attempt to defer a deferred request");
+                       if (is_deferred_open_entry(e) &&
+                           serverid_equal(&self, &e->pid) &&
+                           (e->op_mid == req->mid)) {
+                               DEBUG(0, ("Trying to defer an already deferred "
+                                       "request: mid=%llu, exiting\n",
+                                       (unsigned long long)req->mid));
+                               exit_server("attempt to defer a deferred request");
+                       }
                }
        }
 
@@ -1384,7 +1387,9 @@ static void defer_open(struct share_mode_lock *lck,
                                       state->id, (char *)state, sizeof(*state))) {
                exit_server("push_deferred_open_message_smb failed");
        }
-       add_deferred_open(lck, req->mid, request_time, self, state->id);
+       if (lck) {
+               add_deferred_open(lck, req->mid, request_time, self, state->id);
+       }
 }