ctdb-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@samba.org>
Fri, 12 Jun 2015 10:40:54 +0000 (12:40 +0200)
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>
ctdb/server/ctdb_lock.c

index 8c45a442e5ac5d170086ecdcdd7724ab7767d538..d5eb71768130e34412d74750c0900c0291ff941e 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;
 }