Update the delip command
authorRonnie Sahlberg <ronniesahlberg@gmail.com>
Thu, 28 Jul 2011 22:41:35 +0000 (08:41 +1000)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Thu, 28 Jul 2011 22:46:53 +0000 (08:46 +1000)
Dont talloc_free(vnn) immediately but postphone it until later when
the eventscript callback has completed.

CQ S1026664

server/ctdb_takeover.c

index ddbc77f2c4a6a3e475efc35dfa63923a3db9d557..a971fdecfbe956eec8b8b6341c62b055a86c2bb9 100644 (file)
@@ -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;
                        }