diff options
author | Martin Schwenke <martin@meltin.net> | 2013-09-06 11:23:07 +1000 |
---|---|---|
committer | Amitay Isaacs <amitay@gmail.com> | 2013-09-19 12:54:31 +1000 |
commit | 566d66e6aba1536998bd94fe207a66c3a6936f52 (patch) | |
tree | 1c6a43cd05d1a4dc39dcaf0a0e09db95abc62ce1 /ctdb/server/ctdb_recoverd.c | |
parent | 4fb0d4a301d4409d125ccfb56f7d9ebba37095be (diff) | |
download | samba-566d66e6aba1536998bd94fe207a66c3a6936f52.tar.gz samba-566d66e6aba1536998bd94fe207a66c3a6936f52.tar.xz samba-566d66e6aba1536998bd94fe207a66c3a6936f52.zip |
recoverd: Be careful about freeing the list of IP rebalance target nodes
It can change during a takeover run. If it does then don't free it.
There are potentially fancier solutions (e.g. check what PNNs are new
to the list) to this issue but this is the simplest.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit e81589b7084c661adf617e166cc2c25b4939f841)
Diffstat (limited to 'ctdb/server/ctdb_recoverd.c')
-rw-r--r-- | ctdb/server/ctdb_recoverd.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/ctdb/server/ctdb_recoverd.c b/ctdb/server/ctdb_recoverd.c index 527190d2383..14f1fa8cde3 100644 --- a/ctdb/server/ctdb_recoverd.c +++ b/ctdb/server/ctdb_recoverd.c @@ -1661,6 +1661,7 @@ static bool do_takeover_run(struct ctdb_recoverd *rec, struct srvid_request dtr; TDB_DATA data; int i; + uint32_t *rebalance_nodes = rec->force_rebalance_nodes; int ret; bool ok; @@ -1731,7 +1732,12 @@ static bool do_takeover_run(struct ctdb_recoverd *rec, ok = true; /* Takeover run was successful so clear force rebalance targets */ - TALLOC_FREE(rec->force_rebalance_nodes); + if (rebalance_nodes == rec->force_rebalance_nodes) { + TALLOC_FREE(rec->force_rebalance_nodes); + } else { + DEBUG(DEBUG_WARNING, + ("Rebalance target nodes changed during takeover run - not clearing\n")); + } done: rec->need_takeover_run = !ok; talloc_free(nodes); |