locking: Avoid resetting talloc destructor
authorAmitay Isaacs <amitay@gmail.com>
Tue, 2 Jun 2015 01:25:44 +0000 (11:25 +1000)
committerAmitay Isaacs <amitay@gmail.com>
Mon, 15 Jun 2015 02:13:01 +0000 (12:13 +1000)
Let ctdb_lock_request_destructor() take care of the proper cleanup.
If the request if freed from the callback function, then the lock context
should not be freed.  Setting request->lctx to NULL takes care of that
in the destructor.

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

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

server/ctdb_lock.c

index 1d3e163d0ccf72ab094224915c1dc5d5b44a84d2..22a6eea568aca824b017242919660a609fd9134e 100644 (file)
@@ -353,8 +353,10 @@ static void process_callbacks(struct lock_context *lock_ctx, bool locked)
 
        request = lock_ctx->request;
        if (lock_ctx->auto_mark) {
-               /* Reset the destructor, so request is not removed from the list */
-               talloc_set_destructor(request, NULL);
+               /* Since request may be freed in the callback, unset the lock
+                * context, so request destructor will not free lock context.
+                */
+               request->lctx = NULL;
        }
 
        /* Since request may be freed in the callback, unset the request */