ctdb-takeover: Allocate IP list unconditionally in send function
authorMartin Schwenke <martin@meltin.net>
Thu, 23 Feb 2017 05:10:33 +0000 (16:10 +1100)
committerMartin Schwenke <martins@samba.org>
Fri, 24 Feb 2017 06:47:11 +0000 (07:47 +0100)
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 <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
ctdb/server/ctdb_takeover_helper.c

index 5f537c435614ed1d60ae01882137c85e5f158971..796d45cc4a742e3760b7c0d4bd532546b3f5661f 100644 (file)
@@ -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;