From bc747030d435447e62262541cf2e74be4c4229d8 Mon Sep 17 00:00:00 2001 From: Amitay Isaacs Date: Tue, 2 Jun 2015 11:25:44 +1000 Subject: ctdb-locking: Avoid resetting talloc destructor 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 Reviewed-by: Stefan Metzmacher --- ctdb/server/ctdb_lock.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'ctdb') diff --git a/ctdb/server/ctdb_lock.c b/ctdb/server/ctdb_lock.c index 2377ac0ef80..7b43b1df353 100644 --- a/ctdb/server/ctdb_lock.c +++ b/ctdb/server/ctdb_lock.c @@ -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 */ -- cgit v1.2.1