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
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to