Changeset: e7137c7b1d25 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/e7137c7b1d25
Modified Files:
gdk/gdk_bbp.c
Branch: default
Log Message:
Don't leak bats array
diffs (117 lines):
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -728,6 +728,9 @@ BBPreadEntries(FILE *fp, unsigned bbpver
if (buf[nread] != '\n' && buf[nread] != ' ') {
BATdestroy(bn);
+#ifdef GDKLIBRARY_HASHASH
+ GDKfree(hbats);
+#endif
TRC_CRITICAL(GDK, "invalid format for BBP.dir on line
%d", lineno);
return GDK_FAIL;
}
@@ -736,6 +739,9 @@ BBPreadEntries(FILE *fp, unsigned bbpver
if (snprintf(BBP_bak(bid), sizeof(BBP_bak(bid)), "tmp_%o",
(unsigned) bid) >= (int) sizeof(BBP_bak(bid))) {
BATdestroy(bn);
+#ifdef GDKLIBRARY_HASHASH
+ GDKfree(hbats);
+#endif
TRC_CRITICAL(GDK, "BBP logical filename directory is
too large, on line %d\n", lineno);
return GDK_FAIL;
}
@@ -754,6 +760,9 @@ BBPreadEntries(FILE *fp, unsigned bbpver
BBP_logical(bid) = GDKstrdup(logical);
if (BBP_logical(bid) == NULL) {
BATdestroy(bn);
+#ifdef GDKLIBRARY_HASHASH
+ GDKfree(hbats);
+#endif
TRC_CRITICAL(GDK, "GDKstrdup failed\n");
return GDK_FAIL;
}
@@ -769,6 +778,9 @@ BBPreadEntries(FILE *fp, unsigned bbpver
BBP_options(bid) = GDKstrdup(options);
if (BBP_options(bid) == NULL) {
BATdestroy(bn);
+#ifdef GDKLIBRARY_HASHASH
+ GDKfree(hbats);
+#endif
TRC_CRITICAL(GDK, "GDKstrdup failed\n");
return GDK_FAIL;
}
@@ -1424,6 +1436,7 @@ BBPinit(bool first)
#ifdef GDKLIBRARY_HASHASH
bat *hashbats = NULL;
bat nhashbats = 0;
+ gdk_return res = GDK_SUCCEED;
#endif
/* the maximum number of BATs allowed in the system and the
@@ -1565,6 +1578,9 @@ BBPinit(bool first)
if (BBPinithash(0, (bat) ATOMIC_GET(&BBPsize)) != GDK_SUCCEED) {
TRC_CRITICAL(GDK, "BBPinithash failed");
MT_lock_unset(&BBPnameLock);
+#ifdef GDKLIBRARY_HASHASH
+ GDKfree(hashbats);
+#endif
return GDK_FAIL;
}
MT_lock_unset(&BBPnameLock);
@@ -1575,13 +1591,20 @@ BBPinit(bool first)
gdk_return rc = BBPprepare(false);
MT_lock_unset(&GDKtmLock);
if (rc != GDK_SUCCEED) {
+#ifdef GDKLIBRARY_HASHASH
+ GDKfree(hashbats);
+#endif
TRC_CRITICAL(GDK, "cannot properly prepare process
%s.", BAKDIR);
return rc;
}
}
- if (BBPcheckbats(bbpversion) != GDK_SUCCEED)
+ if (BBPcheckbats(bbpversion) != GDK_SUCCEED) {
+#ifdef GDKLIBRARY_HASHASH
+ GDKfree(hashbats);
+#endif
return GDK_FAIL;
+ }
#ifdef GDKLIBRARY_TAILN
char *needstrbatmove;
@@ -1596,6 +1619,9 @@ BBPinit(bool first)
if (fd < 0) {
TRC_CRITICAL(GDK, "cannot create signal file
needstrbatmove.\n");
GDKfree(needstrbatmove);
+#ifdef GDKLIBRARY_HASHASH
+ GDKfree(hashbats);
+#endif
return GDK_FAIL;
}
close(fd);
@@ -1613,6 +1639,9 @@ BBPinit(bool first)
} else {
GDKsyserror("unexpected error opening %s\n",
needstrbatmove);
GDKfree(needstrbatmove);
+#ifdef GDKLIBRARY_HASHASH
+ GDKfree(hashbats);
+#endif
return GDK_FAIL;
}
}
@@ -1620,8 +1649,11 @@ BBPinit(bool first)
#endif
#ifdef GDKLIBRARY_HASHASH
- if (nhashbats > 0 && fixhashash(hashbats, nhashbats) != GDK_SUCCEED)
- return GDK_FAIL;
+ if (nhashbats > 0)
+ res = fixhashash(hashbats, nhashbats);
+ GDKfree(hashbats);
+ if (res != GDK_SUCCEED)
+ return res;
#endif
if (bbpversion < GDKLIBRARY && TMcommit() != GDK_SUCCEED) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list