diff options
author | Michael Adam <obnox@samba.org> | 2011-02-23 00:01:13 +0100 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2011-02-24 10:35:25 +0100 |
commit | 01c2c0c26287febbb34274226bb6cec4dac6a936 (patch) | |
tree | 47f0812cb2c572df3023902f353ef270c8eba610 | |
parent | 503b647319524b7f9b0c50f2bfe4a3284324f7a2 (diff) | |
download | samba-01c2c0c26287febbb34274226bb6cec4dac6a936.tar.gz samba-01c2c0c26287febbb34274226bb6cec4dac6a936.tar.xz samba-01c2c0c26287febbb34274226bb6cec4dac6a936.zip |
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.
(This used to be ctdb commit 761cb235193564a0f337d0308f0a9e6de0ef2710)
-rw-r--r-- | ctdb/server/ctdb_persistent.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/ctdb/server/ctdb_persistent.c b/ctdb/server/ctdb_persistent.c index afefeaf77f..e299c9fac3 100644 --- a/ctdb/server/ctdb_persistent.c +++ b/ctdb/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]]; |