From af19cb7c0fdfbee813e73943f9436f1d244626c1 Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Wed, 23 Feb 2011 00:01:13 +0100 Subject: [PATCH] persistent: allocate the persistent state in the ctdb_db struct in trans3_commit Make sure that ctdb_db->persistent_state is correctly NULL-ed when the state is freed. This way, we can use ctdb_db->persistent_state as an indication for whether a transaction commit is currently running. --- server/ctdb_persistent.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/server/ctdb_persistent.c b/server/ctdb_persistent.c index afefeaf7..e299c9fa 100644 --- a/server/ctdb_persistent.c +++ b/server/ctdb_persistent.c @@ -275,6 +275,14 @@ int32_t ctdb_control_trans2_commit(struct ctdb_context *ctdb, return 0; } +static int ctdb_persistent_state_destructor(struct ctdb_persistent_state *state) +{ + if (state->ctdb_db != NULL) { + state->ctdb_db->persistent_state = NULL; + } + + return 0; +} /* * Store a set of persistent records. @@ -309,11 +317,15 @@ int32_t ctdb_control_trans3_commit(struct ctdb_context *ctdb, return -1; } - state = talloc_zero(ctdb, struct ctdb_persistent_state); - CTDB_NO_MEMORY(ctdb, state); + ctdb_db->persistent_state = talloc_zero(ctdb_db, + struct ctdb_persistent_state); + CTDB_NO_MEMORY(ctdb, ctdb_db->persistent_state); + state = ctdb_db->persistent_state; state->ctdb = ctdb; + state->ctdb_db = ctdb_db; state->c = c; + talloc_set_destructor(state, ctdb_persistent_state_destructor); for (i = 0; i < ctdb->vnn_map->size; i++) { struct ctdb_node *node = ctdb->nodes[ctdb->vnn_map->map[i]]; -- 2.34.1