From: Amitay Isaacs Date: Fri, 1 Jul 2016 07:53:17 +0000 (+1000) Subject: ctdb-client: Fix implementation of transaction cancel X-Git-Url: http://git.samba.org/?p=obnox%2Fsamba%2Fsamba-obnox.git;a=commitdiff_plain;h=1bd97e6d6ff8a99fae28c29be9bbaab93802e986 ctdb-client: Fix implementation of transaction cancel Wrap async transaction cancel to unlock g_lock lock and free transaction handle. Signed-off-by: Amitay Isaacs Reviewed-by: Martin Schwenke --- diff --git a/ctdb/client/client_db.c b/ctdb/client/client_db.c index c1c77124abc..8bfd3f08f03 100644 --- a/ctdb/client/client_db.c +++ b/ctdb/client/client_db.c @@ -2234,7 +2234,33 @@ bool ctdb_transaction_cancel_recv(struct tevent_req *req, int *perr) int ctdb_transaction_cancel(struct ctdb_transaction_handle *h) { - talloc_free(h); + struct tevent_context *ev = h->ev; + struct tevent_req *req; + TALLOC_CTX *mem_ctx; + int ret; + bool status; + + mem_ctx = talloc_new(NULL); + if (mem_ctx == NULL) { + return ENOMEM; + } + + req = ctdb_transaction_cancel_send(mem_ctx, ev, + tevent_timeval_zero(), h); + if (req == NULL) { + talloc_free(mem_ctx); + return ENOMEM; + } + + tevent_req_poll(req, ev); + + status = ctdb_transaction_cancel_recv(req, &ret); + if (! status) { + talloc_free(mem_ctx); + return ret; + } + + talloc_free(mem_ctx); return 0; }