diff options
author | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2012-02-27 07:18:19 +1100 |
---|---|---|
committer | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2012-02-27 07:21:26 +1100 |
commit | 91c9371f2dcae686527c73d4812ade3de63483c4 (patch) | |
tree | 6df5c37555db2a7e48b94a381acc9b610ae67a2f | |
parent | 93ec9c589c55edfed1a04ceb2217108ceb690089 (diff) | |
download | samba-91c9371f2dcae686527c73d4812ade3de63483c4.tar.gz samba-91c9371f2dcae686527c73d4812ade3de63483c4.tar.xz samba-91c9371f2dcae686527c73d4812ade3de63483c4.zip |
Make KILLTCP structure a child of VNN so that it is freed at the same time
the referenced VNN structure is.
Also, remove the circular reference between the two objects KIPPCTP and VNN
(This used to be ctdb commit 02b62482164a3c69715949074feb7f191a29d534)
-rw-r--r-- | ctdb/server/ctdb_takeover.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/ctdb/server/ctdb_takeover.c b/ctdb/server/ctdb_takeover.c index 830b751b03..c91d2f7de5 100644 --- a/ctdb/server/ctdb_takeover.c +++ b/ctdb/server/ctdb_takeover.c @@ -2934,9 +2934,25 @@ static void ctdb_tickle_sentenced_connections(struct event_context *ev, struct t */ static int ctdb_killtcp_destructor(struct ctdb_kill_tcp *killtcp) { - if (killtcp->vnn) { - killtcp->vnn->killtcp = NULL; + struct ctdb_vnn *tmpvnn; + + /* verify that this vnn is still active */ + for (tmpvnn = killtcp->ctdb->vnn; tmpvnn; tmpvnn = tmpvnn->next) { + if (tmpvnn == killtcp->vnn) { + break; + } + } + + if (tmpvnn == NULL) { + return 0; } + + if (killtcp->vnn->killtcp != killtcp) { + return 0; + } + + killtcp->vnn->killtcp = NULL; + return 0; } @@ -2991,7 +3007,7 @@ static int ctdb_killtcp_add_connection(struct ctdb_context *ctdb, a new structure */ if (killtcp == NULL) { - killtcp = talloc_zero(ctdb, struct ctdb_kill_tcp); + killtcp = talloc_zero(vnn, struct ctdb_kill_tcp); CTDB_NO_MEMORY(ctdb, killtcp); killtcp->vnn = vnn; |