From 42bcfa6a51cd829304742fd3aa70d8958c5b10fe Mon Sep 17 00:00:00 2001 From: Martin Schwenke Date: Thu, 23 Feb 2017 16:10:33 +1100 Subject: ctdb-takeover: Allocate IP list unconditionally in send function This simplifies error handling and make failures less likely after send. This also means that num_nodes is not required in the state. Also quietly remove unused ev and client from state. Signed-off-by: Martin Schwenke Reviewed-by: Amitay Isaacs --- ctdb/server/ctdb_takeover_helper.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) (limited to 'ctdb/server/ctdb_takeover_helper.c') diff --git a/ctdb/server/ctdb_takeover_helper.c b/ctdb/server/ctdb_takeover_helper.c index 5f537c43561..796d45cc4a7 100644 --- a/ctdb/server/ctdb_takeover_helper.c +++ b/ctdb/server/ctdb_takeover_helper.c @@ -88,10 +88,8 @@ determine_algorithm(const struct ctdb_tunable_list *tunables) /**********************************************************************/ struct get_public_ips_state { - struct tevent_context *ev; - struct ctdb_client_context *client; uint32_t *pnns; - int count, num_nodes; + int count; struct ctdb_public_ip_list *ips; }; @@ -116,8 +114,13 @@ static struct tevent_req *get_public_ips_send( state->pnns = pnns; state->count = count; - state->num_nodes = num_nodes; - state->ips = NULL; + + state->ips = talloc_zero_array(state, + struct ctdb_public_ip_list, + num_nodes); + if (tevent_req_nomem(state->ips, req)) { + return tevent_req_post(req, ev); + } ctdb_req_control_get_public_ips(&request, available_only); subreq = ctdb_client_control_multi_send(mem_ctx, ev, client, @@ -164,12 +167,6 @@ static void get_public_ips_done(struct tevent_req *subreq) return; } - state->ips = talloc_zero_array(state, struct ctdb_public_ip_list, - state->num_nodes); - if (tevent_req_nomem(state->ips, req)) { - return; - } - for (i = 0; i < state->count; i++) { uint32_t pnn; struct ctdb_public_ip_list *ips; -- cgit v1.2.1