If the recovery lock is in the process of being taken then free the
cluster mutex handle but leave the recovery lock handle in place.
This allows ctdb_recovery_lock() to fail.
Note that this isn't yet live because rec->recovery_lock_handle is
still only set at the completion of the attempt to take the lock.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13617
Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
return;
}
+ if (! rec->recovery_lock_handle->done) {
+ /*
+ * Taking of recovery lock still in progress. Free
+ * the cluster mutex handle to release it but leave
+ * the recovery lock handle in place to allow taking
+ * of the lock to fail.
+ */
+ D_NOTICE("Cancelling recovery lock\n");
+ TALLOC_FREE(rec->recovery_lock_handle->h);
+ rec->recovery_lock_handle->done = true;
+ rec->recovery_lock_handle->locked = false;
+ return;
+ }
+
D_NOTICE("Releasing recovery lock\n");
TALLOC_FREE(rec->recovery_lock_handle);
}