summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2011-02-23 00:01:13 +0100
committerMichael Adam <obnox@samba.org>2011-02-24 10:35:25 +0100
commit01c2c0c26287febbb34274226bb6cec4dac6a936 (patch)
tree47f0812cb2c572df3023902f353ef270c8eba610
parent503b647319524b7f9b0c50f2bfe4a3284324f7a2 (diff)
downloadsamba-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.c16
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]];