ctdb-tools: Close tdb database on error
authorAmitay Isaacs <amitay@gmail.com>
Fri, 5 Aug 2016 03:25:25 +0000 (13:25 +1000)
committerMartin Schwenke <martins@samba.org>
Mon, 8 Aug 2016 06:17:33 +0000 (08:17 +0200)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=12121

Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
ctdb/tools/ctdb.c

index 5ed4e59d2e6594157cc981ce453629ac1c44547a..eca98d1a31d6c157de5ae24122d8ec38dc8a8013 100644 (file)
@@ -5442,17 +5442,20 @@ static int control_tfetch(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
        ret = str_to_data(argv[1], strlen(argv[1]), mem_ctx, &key);
        if (ret != 0) {
                fprintf(stderr, "Failed to parse key %s\n", argv[1]);
+               tdb_close(tdb);
                return ret;
        }
 
        data = tdb_fetch(tdb, key);
        if (data.dptr == NULL) {
                fprintf(stderr, "No record for key %s\n", argv[1]);
+               tdb_close(tdb);
                return 1;
        }
 
        if (data.dsize < sizeof(struct ctdb_ltdb_header)) {
                fprintf(stderr, "Invalid record for key %s\n", argv[1]);
+               tdb_close(tdb);
                return 1;
        }
 
@@ -5514,12 +5517,14 @@ static int control_tstore(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
        ret = str_to_data(argv[1], strlen(argv[1]), mem_ctx, &key);
        if (ret != 0) {
                fprintf(stderr, "Failed to parse key %s\n", argv[1]);
+               tdb_close(tdb);
                return ret;
        }
 
        ret = str_to_data(argv[2], strlen(argv[2]), mem_ctx, &value);
        if (ret != 0) {
                fprintf(stderr, "Failed to parse value %s\n", argv[2]);
+               tdb_close(tdb);
                return ret;
        }
 
@@ -5540,6 +5545,7 @@ static int control_tstore(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb,
        data.dptr = talloc_size(mem_ctx, data.dsize);
        if (data.dptr == NULL) {
                fprintf(stderr, "Memory allocation error\n");
+               tdb_close(tdb);
                return 1;
        }