/* destroy a ctdb_client */ static int ctdb_client_destructor(struct ctdb_client *client) { struct ctdb_db_context *ctdb_db; ctdb_takeover_client_destructor_hook(client); reqid_remove(client->ctdb->idr, client->client_id); client->ctdb->num_clients--; if (client->num_persistent_updates != 0) { DEBUG(DEBUG_ERR,(__location__ " Client disconnecting with %u persistent updates in flight. Starting recovery\n", client->num_persistent_updates)); client->ctdb->recovery_mode = CTDB_RECOVERY_ACTIVE; } ctdb_db = find_ctdb_db(client->ctdb, client->db_id); if (ctdb_db) { DEBUG(DEBUG_ERR, (__location__ " client exit while transaction " "commit active. Forcing recovery.\n")); client->ctdb->recovery_mode = CTDB_RECOVERY_ACTIVE; /* * trans3 transaction state: * * The destructor sets the pointer to NULL. */ talloc_free(ctdb_db->persistent_state); } return 0; }
static int ctdb_control_destructor(struct ctdb_control_state *state) { reqid_remove(state->ctdb->idr, state->reqid); return 0; }