Make the call to free the request explicit in the callback
authorRonnie Sahlberg <ronniesahlberg@gmail.com>
Wed, 2 Jun 2010 03:49:34 +0000 (13:49 +1000)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Wed, 2 Jun 2010 03:49:34 +0000 (13:49 +1000)
instead of implicit

include/ctdb.h
libctdb/ctdb.c
libctdb/tst.c

index 040cd0c2e47d263cc6006a6f8b13a929469f89a2..32a7a2c357001c8e7e526664eaecac994533d683 100644 (file)
 #include <tdb.h>
 
 /* All *_send() functions are guaranteed to be non-blocking and fully
- * asynchronous.  The non-_send variants are synchronous. */
+ * asynchronous.  The non-_send variants are synchronous.
+ */
 
 /*
  * Connect to ctdb using the specified domain socket.
  * Returns a ctdb context if successful or NULL.
  *
- * Use ctdb_free() to release the returned ctdb_connection when finished.
  */
 struct ctdb_connection *ctdb_connect(const char *addr);
 
@@ -48,7 +48,8 @@ void ctdb_request_free(struct ctdb_request *req);
 
 /*
  * Callback for completed requests: it would normally unpack the request
- * using ctdb_*_recv().  You must free the request using ctdb_request_free().
+ * using ctdb_*_recv().
+ * You must free the request using ctdb_request_free().
  *
  * Note that due to macro magic, your callback doesn't have to take void *,
  * it can take a type which matches the actual private parameter.
index 08355efbd1b5c9c60a3165a67b5c9697fe465b22..e49e3d8cde3ef3ebab7f827e454fe4320c30e48c 100644 (file)
@@ -75,6 +75,7 @@ static void set_pnn(struct ctdb_connection *ctdb,
                /* FIXME: Report error. */
                ctdb->broken = true;
        }
+       ctdb_request_free(req);
 }
 
 struct ctdb_connection *ctdb_connect(const char *addr)
@@ -240,7 +241,6 @@ static void handle_incoming(struct ctdb_connection *ctdb, struct io_elem *in)
                        DLIST_REMOVE(ctdb->doneq, i);
                        i->reply = in;
                        i->callback(ctdb, i, i->priv_data);
-                       ctdb_request_free(i);
                        return;
                }
        }
index af23a5693ab04e5809885368d848006cf0f1136f..6fd376a7f86a2b8ac8024434fbfcf6ef35585a4b 100644 (file)
@@ -50,6 +50,7 @@ static void pnn_cb(struct ctdb_connection *ctdb,
        uint32_t pnn;
 
        status = ctdb_getpnn_recv(req, &pnn);
+       ctdb_request_free(req);
        if (status != 0) {
                printf("Error reading PNN\n");
                return;
@@ -64,6 +65,7 @@ static void rm_cb(struct ctdb_connection *ctdb,
        uint32_t rm;
 
        status = ctdb_getrecmaster_recv(req, &rm);
+       ctdb_request_free(req);
        if (status != 0) {
                printf("Error reading RECMASTER\n");
                return;
@@ -118,6 +120,7 @@ void message_handler_cb(struct ctdb_connection *ctdb,
        if (ctdb_set_message_handler_recv(ctdb, req) != 0) {
                err(1, "registering message");
        }
+       ctdb_request_free(req);
        printf("Message handler registered\n");
        registered = true;
 }