summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronniesahlberg@gmail.com>2011-07-29 08:41:35 +1000
committerRonnie Sahlberg <ronniesahlberg@gmail.com>2011-07-29 08:50:48 +1000
commite707f235967407cc5a9197d40b3f30513d75c67d (patch)
tree15a460eab1482ebe76767b203535aa61b53b7f4b
parent87ea4818bf4414c1895e60a287d009a5d2011de2 (diff)
downloadsamba-e707f235967407cc5a9197d40b3f30513d75c67d.tar.gz
samba-e707f235967407cc5a9197d40b3f30513d75c67d.tar.xz
samba-e707f235967407cc5a9197d40b3f30513d75c67d.zip
Update the delip command
Dont talloc_free(vnn) immediately but postphone it until later when the eventscript callback has completed. CQ S1026664 (This used to be ctdb commit 0a99e8742a261b1d3a2c8830f5c19ea6c2c47cad)
-rw-r--r--ctdb/server/ctdb_takeover.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/ctdb/server/ctdb_takeover.c b/ctdb/server/ctdb_takeover.c
index ddbc77f2c4a..a971fdecfbe 100644
--- a/ctdb/server/ctdb_takeover.c
+++ b/ctdb/server/ctdb_takeover.c
@@ -2892,12 +2892,16 @@ int32_t ctdb_control_del_public_address(struct ctdb_context *ctdb, TDB_DATA inda
TALLOC_CTX *mem_ctx;
DLIST_REMOVE(ctdb->vnn, vnn);
- if (vnn->iface == NULL) {
+ if (vnn->iface != NULL) {
+ ctdb_vnn_unassign_iface(ctdb, vnn);
+ }
+ if (vnn->pnn != ctdb->pnn) {
talloc_free(vnn);
return 0;
}
mem_ctx = talloc_new(ctdb);
+ talloc_steal(mem_ctx, vnn);
ret = ctdb_event_script_callback(ctdb,
mem_ctx, delete_ip_callback, mem_ctx,
false,
@@ -2906,8 +2910,6 @@ int32_t ctdb_control_del_public_address(struct ctdb_context *ctdb, TDB_DATA inda
ctdb_vnn_iface_string(vnn),
ctdb_addr_to_str(&vnn->public_address),
vnn->public_netmask_bits);
- ctdb_vnn_unassign_iface(ctdb, vnn);
- talloc_free(vnn);
if (ret != 0) {
return -1;
}