locking: Set the lock_ctx->request to NULL when request is freed
authorStefan Metzmacher <metze@samba.org>
Mon, 1 Jun 2015 14:15:11 +0000 (00:15 +1000)
committerAmitay Isaacs <amitay@gmail.com>
Mon, 15 Jun 2015 02:13:01 +0000 (12:13 +1000)
The code was added to ctdb_lock_context_destructor() to ensure that
the if a lock_ctx gets freed first, the lock_request does not have a
dangling pointer.  However, the reverse is also true.  When a lock_request
is freed, then lock_ctx should not have a dangling pointer.

In commit 374cbc7b0ff68e04ee4e395935509c7df817b3c0, the code for second
condition was dropped causing a regression.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=11293

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
(Imported from commit 752ec31bcbbfe9f5b3b1c5dde4179d69f41cb53c)

server/ctdb_lock.c

index 8ee6f1d4c108bb0d2fb7e7a5fb0de0a8fb607884..f5b5743eccbee29bda496972ee9d0f37fefceba5 100644 (file)
@@ -312,7 +312,13 @@ static int ctdb_lock_context_destructor(struct lock_context *lock_ctx)
  */
 static int ctdb_lock_request_destructor(struct lock_request *lock_request)
 {
+       if (lock_request->lctx == NULL) {
+               return 0;
+       }
+
+       lock_request->lctx->request = NULL;
        TALLOC_FREE(lock_request->lctx);
+
        return 0;
 }