change the controls to return a struct ctdb_client_control_state* instead of a handle
[sahlberg/ctdb.git] / libctdb / libctdb.c
index b6df7e7175f20da2a807acb8fe58452a06a323b2..25d60b796a8b7b269f33fd46ca1306f2e0b7f44d 100644 (file)
@@ -64,40 +64,32 @@ ctdb_control_cb(struct ctdb_client_control_state *state)
  * This function is used to set the callback action for a handle
  */
 static int
-ctdb_set_control_callback(ctdb_handle *handle, ctdb_control_callback callback, void *private_data)
+ctdb_set_control_callback(struct ctdb_client_control_state *state, ctdb_control_callback callback, void *private_data)
 {
-       struct ctdb_client_control_state *control_state = talloc_get_type(handle, struct ctdb_client_control_state);
-
-       if (control_state != NULL) {
-               struct ctdb_control_cb_data *cb_data;
-
-               if (callback == NULL) {
-                       if (control_state->async.private_data != NULL) {
-                               talloc_free(control_state->async.private_data);
-                               control_state->async.private_data = NULL;
-                       }
-                       control_state->async.fn           = NULL;
-
-                       return 0;
-               }
+       struct ctdb_control_cb_data *cb_data;
 
-               cb_data = talloc(control_state, struct ctdb_control_cb_data);
-               if (cb_data == NULL) {
-                       DEBUG(DEBUG_ERR, (__location__ " Failed to alloc cb_data\n"));
-                       return -1;
+       if (callback == NULL) {
+               if (state->async.private_data != NULL) {
+                       talloc_free(state->async.private_data);
+                       state->async.private_data = NULL;
                }
+               state->async.fn           = NULL;
+               return 0;
+       }
 
-               cb_data->callback     = callback;
-               cb_data->private_data = private_data;
+       cb_data = talloc(state, struct ctdb_control_cb_data);
+       if (cb_data == NULL) {
+               DEBUG(DEBUG_ERR, (__location__ " Failed to alloc cb_data\n"));
+               return -1;
+       }
 
-               control_state->async.fn           = ctdb_control_cb;
-               control_state->async.private_data = cb_data;
+       cb_data->callback     = callback;
+       cb_data->private_data = private_data;
 
-               return 0;
-       }
+       state->async.fn           = ctdb_control_cb;
+       state->async.private_data = cb_data;
 
-       DEBUG(DEBUG_ERR, (__location__ " Unknown type of handle passed to ctdb_set_callback.\n"));
-       return -1;
+       return 0;
 }
 
 
@@ -226,6 +218,11 @@ int ctdb_service(struct ctdb_context *ctdb)
 }
 
 
+int ctdb_cancel_control(struct ctdb_client_control_state *state)
+{
+       talloc_free(state);
+       return 0;
+}
 
 int ctdb_free(ctdb_handle *handle)
 {
@@ -239,7 +236,7 @@ int ctdb_free(ctdb_handle *handle)
 /*************************
  * GET PNN of local node *
  *************************/
-ctdb_handle *
+struct ctdb_client_control_state *
 ctdb_getpnn_send(struct ctdb_context *ctdb,
                        uint32_t destnode,
                        ctdb_control_callback callback,
@@ -260,12 +257,11 @@ ctdb_getpnn_send(struct ctdb_context *ctdb,
                ctdb_set_control_callback(state, callback, private_data);
        }
 
-       return (ctdb_handle *)state;
+       return state;
 }
 
-int ctdb_getpnn_recv(struct ctdb_context *ctdb, ctdb_handle *handle, uint32_t *pnn)
+int ctdb_getpnn_recv(struct ctdb_context *ctdb, struct ctdb_client_control_state *state, uint32_t *pnn)
 {
-       struct ctdb_client_control_state *state = talloc_get_type(handle, struct ctdb_client_control_state);
        int ret;
 
        if (state->c->opcode != CTDB_CONTROL_GET_PNN) {
@@ -303,7 +299,7 @@ int ctdb_getpnn(struct ctdb_context *ctdb, uint32_t destnode, uint32_t *pnn)
 /***********************
  * GET RECOVERY MASTER *
  ***********************/
-ctdb_handle *
+struct ctdb_client_control_state *
 ctdb_getrecmaster_send(struct ctdb_context *ctdb,
                        uint32_t destnode,
                        ctdb_control_callback callback,
@@ -324,12 +320,11 @@ ctdb_getrecmaster_send(struct ctdb_context *ctdb,
                ctdb_set_control_callback(state, callback, private_data);
        }
 
-       return (ctdb_handle *)state;
+       return state;
 }
 
-int ctdb_getrecmaster_recv(struct ctdb_context *ctdb, ctdb_handle *handle, uint32_t *recmaster)
+int ctdb_getrecmaster_recv(struct ctdb_context *ctdb, struct ctdb_client_control_state *state, uint32_t *recmaster)
 {
-       struct ctdb_client_control_state *state = talloc_get_type(handle, struct ctdb_client_control_state);
        int ret;
 
        if (state->c->opcode != CTDB_CONTROL_GET_RECMASTER) {