ctdb-client: Close ctdb socket connection when client context goes away
authorAmitay Isaacs <amitay@gmail.com>
Wed, 14 Oct 2015 04:30:14 +0000 (15:30 +1100)
committerMartin Schwenke <martins@samba.org>
Wed, 20 Jan 2016 03:19:11 +0000 (04:19 +0100)
Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
ctdb/client/client_connect.c

index 0c924855755d574b28a00874bf929e631c7cab64..8cff21307dbe090b88b948c37fb2ac85613bd424 100644 (file)
@@ -43,6 +43,8 @@ static int ctdb_client_connect(struct ctdb_client_context *client,
                               struct tevent_context *ev,
                               const char *sockpath);
 
+static int ctdb_client_context_destructor(struct ctdb_client_context *client);
+
 int ctdb_client_init(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                     const char *sockpath, struct ctdb_client_context **out)
 {
@@ -78,10 +80,21 @@ int ctdb_client_init(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                return ret;
        }
 
+       talloc_set_destructor(client, ctdb_client_context_destructor);
+
        *out = client;
        return 0;
 }
 
+static int ctdb_client_context_destructor(struct ctdb_client_context *client)
+{
+       if (client->fd != -1) {
+               close(client->fd);
+               client->fd = -1;
+       }
+       return 0;
+}
+
 static void client_read_handler(uint8_t *buf, size_t buflen,
                                void *private_data);
 static void client_dead_handler(void *private_data);