summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Ahltorp <map@kth.se>2016-02-11 07:36:26 +0100
committerLinus Nordberg <linus@nordu.net>2016-04-25 13:14:11 +0200
commit37c9792c43cd62bd2a5471506a0ca687599bddc9 (patch)
tree8cd40ed1ae275b844a74391c3701d9cd1e4dfc68
parentcd7a7b8db2b89b4e2a26fa9f4ccc58f3ff72d6f9 (diff)
Free permdb object on error
-rw-r--r--c_src/Makefile2
-rw-r--r--c_src/permdb.c5
2 files changed, 5 insertions, 2 deletions
diff --git a/c_src/Makefile b/c_src/Makefile
index 9a6c0a4..c7e1367 100644
--- a/c_src/Makefile
+++ b/c_src/Makefile
@@ -38,7 +38,7 @@ permdbtest_OBJS = permdb.o arlamath.o hash.o permdbtest.o $(common_OBJS)
all: $(PORTS) $(OTHER_BIN)
clean:
- rm -f $(fsynchelper_OBJS) $(hsmhelper_OBJS) $(permdbport_OBJS) $(permdbso_OBJS) $(permdbtest_OBJS) $(PORTS)
+ rm -f $(fsynchelper_OBJS) $(hsmhelper_OBJS) $(permdbport_OBJS) $(permdbso_OBJS) $(permdbtest_OBJS) $(PORTS) $(OTHER_BIN)
fsynchelper: $(fsynchelper_OBJS)
$(CC) -o fsynchelper $(fsynchelper_OBJS) $(LDFLAGS)
diff --git a/c_src/permdb.c b/c_src/permdb.c
index a4344a0..4b3a6ef 100644
--- a/c_src/permdb.c
+++ b/c_src/permdb.c
@@ -577,18 +577,21 @@ permdb_alloc(const char *dbpath)
} else if (state->datafile.filesize > 0 && state->indexfile.filesize == 0) {
if (rebuild_index_file(state) < 0) {
warnx("index file rebuilding failed");
+ permdb_free(state);
return NULL;
}
}
if (datafile_verify_file(&state->datafile) < 0) {
warnx("data file verification failed");
- return NULL;
+ permdb_free(state);
+ return NULL;
}
if (indexfile_verify_file(&state->indexfile) < 0) {
warnx("index file verification failed, rebuilding");
if (rebuild_index_file(state) < 0) {
warnx("index file rebuilding failed");
+ permdb_free(state);
return NULL;
}
}