From: Martin Schwenke Date: Wed, 1 Jun 2016 07:32:42 +0000 (+1000) Subject: ctdb-recoverd: Simplify reclock handler X-Git-Tag: tdb-1.3.10~923 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a192364a1254172329b0b5d687105eed2c537f21;p=thirdparty%2Fsamba.git ctdb-recoverd: Simplify reclock handler Do the interesting work outside the handler. Signed-off-by: Martin Schwenke Reviewed-by: Amitay Isaacs --- diff --git a/ctdb/server/ctdb_recoverd.c b/ctdb/server/ctdb_recoverd.c index 1ff846ae31f..f3167ff9602 100644 --- a/ctdb/server/ctdb_recoverd.c +++ b/ctdb/server/ctdb_recoverd.c @@ -1550,6 +1550,7 @@ static bool ctdb_recovery_have_lock(struct ctdb_recoverd *rec) struct hold_reclock_state { bool done; bool locked; + double latency; }; static void hold_reclock_handler(struct ctdb_context *ctdb, @@ -1563,19 +1564,16 @@ static void hold_reclock_handler(struct ctdb_context *ctdb, switch (status) { case '0': - ctdb_ctrl_report_recd_lock_latency(ctdb, CONTROL_TIMEOUT(), - latency); + s->latency = latency; break; case '1': DEBUG(DEBUG_ERR, ("Unable to take recovery lock - contention\n")); - talloc_free(h); break; default: DEBUG(DEBUG_ERR, ("ERROR: when taking recovery lock\n")); - talloc_free(h); } s->done = true; @@ -1589,6 +1587,7 @@ static bool ctdb_recovery_lock(struct ctdb_recoverd *rec) struct hold_reclock_state s = { .done = false, .locked = false, + .latency = 0, }; h = ctdb_cluster_mutex(rec, ctdb, ctdb->recovery_lock, 0); @@ -1603,10 +1602,13 @@ static bool ctdb_recovery_lock(struct ctdb_recoverd *rec) } if (! s.locked) { + talloc_free(h); return false; } rec->recovery_lock_handle = h; + ctdb_ctrl_report_recd_lock_latency(ctdb, CONTROL_TIMEOUT(), + s.latency); return true; }