Changeset: ccd9a7c63954 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ccd9a7c63954
Modified Files:
        monetdb5/modules/kernel/bat5.c
Branch: Feb2013
Log Message:

Fix reference counting bugs.
BATsort returns a new reference, so we need to decref also.


diffs (119 lines):

diff --git a/monetdb5/modules/kernel/bat5.c b/monetdb5/modules/kernel/bat5.c
--- a/monetdb5/modules/kernel/bat5.c
+++ b/monetdb5/modules/kernel/bat5.c
@@ -2114,9 +2114,9 @@ BKCshrinkBAT(int *ret, int *bid, int *di
                throw(MAL, "bat.shrink", MAL_MALLOC_FAIL );
        }
        bs = BATmirror(BATsort(BATmirror(d)));
+       BBPreleaseref(d->batCacheid);
        if (bs == NULL) {
                BBPreleaseref(b->batCacheid);
-               BBPreleaseref(d->batCacheid);
                BBPreleaseref(bn->batCacheid);
                throw(MAL, "bat.shrink", MAL_MALLOC_FAIL );
        }
@@ -2171,7 +2171,7 @@ BKCshrinkBAT(int *ret, int *bid, int *di
        if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ);
 
        BBPreleaseref(b->batCacheid);
-       BBPreleaseref(d->batCacheid);
+       BBPreleaseref(bs->batCacheid);
        BBPkeepref(*ret= bn->batCacheid);
        return MAL_SUCCEED;
 }
@@ -2206,9 +2206,9 @@ BKCshrinkBATmap(int *ret, int *bid, int 
                throw(MAL, "bat.shrinkMap", MAL_MALLOC_FAIL );
        }
        bs = BATmirror(BATsort(BATmirror(d)));
+       BBPreleaseref(d->batCacheid);
        if (bs == NULL) {
                BBPreleaseref(b->batCacheid);
-               BBPreleaseref(d->batCacheid);
                BBPreleaseref(bn->batCacheid);
                throw(MAL, "bat.shrinkMap", MAL_MALLOC_FAIL );
        }
@@ -2227,7 +2227,7 @@ BKCshrinkBATmap(int *ret, int *bid, int 
                }
        }
 
-    BATsetcount(bn, BATcount(b)-BATcount(d));
+    BATsetcount(bn, BATcount(b)-BATcount(bs));
        BATseqbase(bn, b->hseqbase);
     bn->tsorted = 0;
     bn->trevsorted = 0;
@@ -2236,7 +2236,7 @@ BKCshrinkBATmap(int *ret, int *bid, int 
     if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ);
 
        BBPreleaseref(b->batCacheid);
-       BBPreleaseref(d->batCacheid);
+       BBPreleaseref(bs->batCacheid);
        BBPkeepref(*ret= bn->batCacheid);
        return MAL_SUCCEED;
 }
@@ -2284,9 +2284,9 @@ BKCreuseBAT(int *ret, int *bid, int *did
                throw(MAL, "bat.reuse", MAL_MALLOC_FAIL );
        }
        bs = BATmirror(BATsort(BATmirror(d)));
+       BBPreleaseref(d->batCacheid);
        if (bs == NULL) {
                BBPreleaseref(b->batCacheid);
-               BBPreleaseref(d->batCacheid);
                BBPreleaseref(bn->batCacheid);
                throw(MAL, "bat.reuse", MAL_MALLOC_FAIL );
        }
@@ -2334,7 +2334,7 @@ BKCreuseBAT(int *ret, int *bid, int *did
                }
        }
 
-    BATsetcount(bn, BATcount(b) - BATcount(d));
+    BATsetcount(bn, BATcount(b) - BATcount(bs));
        BATseqbase(bn, b->hseqbase);
     bn->tsorted = 0;
     bn->trevsorted = 0;
@@ -2344,7 +2344,7 @@ BKCreuseBAT(int *ret, int *bid, int *did
     if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ);
 
        BBPreleaseref(b->batCacheid);
-       BBPreleaseref(d->batCacheid);
+       BBPreleaseref(bs->batCacheid);
        BBPkeepref(*ret= bn->batCacheid);
        return MAL_SUCCEED;
 }
@@ -2373,16 +2373,16 @@ BKCreuseBATmap(int *ret, int *bid, int *
                throw(MAL, "bat.shrinkMap", MAL_MALLOC_FAIL );
        }
        bs = BATmirror(BATsort(BATmirror(d)));
+       BBPreleaseref(d->batCacheid);
        if (bs == NULL) {
                BBPreleaseref(b->batCacheid);
-               BBPreleaseref(d->batCacheid);
                BBPreleaseref(bn->batCacheid);
                throw(MAL, "bat.shrinkMap", MAL_MALLOC_FAIL );
        }
 
        bidx= BUNlast(b)-1;
-    o = (oid*)Tloc(d, BUNfirst(d));
-    ol= (oid*)Tloc(d, BUNlast(d));
+    o = (oid*)Tloc(bs, BUNfirst(bs));
+    ol= (oid*)Tloc(bs, BUNlast(bs));
     r = (oid*)Tloc(bn, BUNfirst(bn));
 
        for (;oidx<bidx; oidx++) {
@@ -2397,7 +2397,7 @@ BKCreuseBATmap(int *ret, int *bid, int *
                        *r++ = oidx; 
        }
 
-    BATsetcount(bn, BATcount(b)-BATcount(d));
+    BATsetcount(bn, BATcount(b)-BATcount(bs));
        BATseqbase(bn, b->hseqbase);
     bn->tsorted = 0;
     bn->trevsorted = 0;
@@ -2406,7 +2406,7 @@ BKCreuseBATmap(int *ret, int *bid, int *
     if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ);
 
        BBPreleaseref(b->batCacheid);
-       BBPreleaseref(d->batCacheid);
+       BBPreleaseref(bs->batCacheid);
        BBPkeepref(*ret= bn->batCacheid);
        return MAL_SUCCEED;
 }
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to