ctdb-client: Close ctdb socket connection when client context goes away
[obnox/samba/samba-obnox.git] / 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);