Changeset: 77a6207dcdb7 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=77a6207dcdb7
Modified Files:
        MonetDB/src/gdk/gdk_bbp.mx
        MonetDB5/src/modules/kernel/bat5.mx
Branch: default
Log Message:

merge with Jun2010:

numerous reference-counting fixes


diffs (190 lines):

diff -r 00e27361f6fe -r 77a6207dcdb7 MonetDB5/src/modules/kernel/bat5.mx
--- a/MonetDB5/src/modules/kernel/bat5.mx       Fri Jun 18 12:59:57 2010 +0200
+++ b/MonetDB5/src/modules/kernel/bat5.mx       Sat Jun 19 21:14:10 2010 +0200
@@ -2397,13 +2397,12 @@
        }
 
        CMDreverse(&bn, b);
+       BBPreleaseref(b->batCacheid);
        if (bn) {
                *ret = bn->batCacheid;
                BBPkeepref(bn->batCacheid);
-               BBPreleaseref(b->batCacheid);
                return MAL_SUCCEED;
        }
-       BBPreleaseref(b->batCacheid);
        throw(MAL, "bat.reverse", GDK_EXCEPTION);
 }
 
@@ -2436,7 +2435,7 @@
        }
        bn= BATrevert(b);
        if(bn==NULL ){
-               BBPkeepref(*ret= b->batCacheid);
+               BBPreleaseref(b->batCacheid);
                throw(MAL, "bat.revert", GDK_EXCEPTION);
        }
        BBPkeepref(*ret= bn->batCacheid);
@@ -2452,11 +2451,12 @@
                throw(MAL, "bat.order", RUNTIME_OBJECT_MISSING);
        }
        bn= BATorder(b);
+       if (bn != b)
+               BBPreleaseref(b->batCacheid);
        if(bn==NULL ){
-               BBPkeepref(*ret= b->batCacheid);
                throw(MAL, "bat.order", GDK_EXCEPTION);
        }
-       BBPkeepref(*ret= b->batCacheid);
+       BBPkeepref(*ret= bn->batCacheid);
        return MAL_SUCCEED;
 }
 
@@ -2470,11 +2470,12 @@
                throw(MAL, "bat.order_rev", RUNTIME_OBJECT_MISSING);
        }
        bn= BATorder_rev(b);
+       if (bn != b)
+               BBPreleaseref(b->batCacheid);
        if(bn==NULL ){
-               BBPkeepref(*ret= b->batCacheid);
                throw(MAL, "bat.order_rev", GDK_EXCEPTION);
        }
-       BBPkeepref(*ret= b->batCacheid);
+       BBPkeepref(*ret= bn->batCacheid);
        return MAL_SUCCEED;
 }
 
@@ -2545,7 +2546,7 @@
        }
        CMDsetaccess(&b,i,&param);
        if (BATins(b, s,FALSE) == NULL) {
-               BBPkeepref(*r=b->batCacheid);
+               BBPreleaseref(b->batCacheid);
                BBPreleaseref(s->batCacheid);
                BBPreleaseref(i->batCacheid);
                throw(MAL, "bat.insert", GDK_EXCEPTION);
@@ -2597,6 +2598,7 @@
        @:derefStr(b,t,t)@
        if (BUNreplace(b, h, t, 0) == NULL) {
                BBPreleaseref(b->batCacheid);
+               BBPreleaseref(i->batCacheid);
                throw(MAL, "bat.replace", GDK_EXCEPTION);
        }
        BBPkeepref(*r=b->batCacheid);
@@ -2623,6 +2625,8 @@
                BBPreleaseref(i->batCacheid);
                BBPreleaseref(s->batCacheid);
                BBPreleaseref(b->batCacheid);
+               if( bn)
+                       BBPreleaseref(bn->batCacheid);
                throw(MAL, "bat.replace", OPERATION_FAILED);
        }
        BBPkeepref(*r=bn->batCacheid);
@@ -2646,12 +2650,12 @@
                BBPreleaseref(b->batCacheid);
                throw(MAL, "bat.replace", OPERATION_FAILED);
        }
-       if(bn->batCacheid != b->batCacheid){
+       if(bn->batCacheid != b->batCacheid) {
                BBPreleaseref(b->batCacheid);
+               BBPreleaseref(bn->batCacheid);
                throw(MAL, "bat.replace", OPERATION_FAILED "Different BAT 
returned");
        }
        BBPkeepref(*r=bn->batCacheid);
-       BBPreleaseref(b->batCacheid);
        return MAL_SUCCEED;
 }
 
@@ -2671,11 +2675,12 @@
        if (bn == NULL || bn->batCacheid != b->batCacheid){
                BBPreleaseref(s->batCacheid);
                BBPreleaseref(b->batCacheid);
+               if (bn)
+                       BBPreleaseref(bn->batCacheid);
                throw(MAL, "bat.replace_bat", OPERATION_FAILED);
        }
        BBPkeepref(*r=bn->batCacheid);
        BBPreleaseref(s->batCacheid);
-       BBPreleaseref(b->batCacheid);
        return MAL_SUCCEED;
 }
 
@@ -2694,8 +2699,11 @@
                BBPreleaseref(b->batCacheid);
                throw(MAL, "bat.delete_bun", OPERATION_FAILED);
        }
-       if(bn->batCacheid != b->batCacheid)
+       if(bn->batCacheid != b->batCacheid) {
+               BBPreleaseref(b->batCacheid);
+               BBPreleaseref(bn->batCacheid);
                throw(MAL, "bat.delete_bun", OPERATION_FAILED "Different BAT 
returned");
+       }
        BBPkeepref(*r=bn->batCacheid);
        return MAL_SUCCEED;
 }
@@ -2714,8 +2722,11 @@
                BBPreleaseref(b->batCacheid);
                throw(MAL, "bat.delete", OPERATION_FAILED);
        }
-       if (bn->batCacheid != b->batCacheid)
+       if (bn->batCacheid != b->batCacheid) {
+               BBPreleaseref(b->batCacheid);
+               BBPreleaseref(bn->batCacheid);
                throw(MAL, "bat.delete", OPERATION_FAILED "Different BAT 
returned");
+       }
        BBPkeepref(*r=bn->batCacheid);
        return MAL_SUCCEED;
 }
@@ -2734,6 +2745,7 @@
                throw(MAL, "bat.delete_all", OPERATION_FAILED);
        }
        if(bn->batCacheid != b->batCacheid){
+               BBPreleaseref(b->batCacheid);
                BBPreleaseref(bn->batCacheid);
                throw(MAL, "bat.delete_all", OPERATION_FAILED "Different BAT 
returned");
        }
@@ -2996,7 +3008,7 @@
                throw(MAL, "bat.inplace", RUNTIME_OBJECT_MISSING);
        }
        void_inplace5(o, *id, t,FALSE);
-       BBPreleaseref(*r = o->batCacheid);
+       BBPkeepref(*r = o->batCacheid);
        return MAL_SUCCEED;
 }
 
@@ -3010,7 +3022,7 @@
                throw(MAL, "bat.inplace", RUNTIME_OBJECT_MISSING);
        }
        void_inplace5(o, *id, t, *force);
-       BBPreleaseref(*r = o->batCacheid);
+       BBPkeepref(*r = o->batCacheid);
        return MAL_SUCCEED;
 }
 
@@ -3028,7 +3040,7 @@
                throw(MAL, "bat.inplace", RUNTIME_OBJECT_MISSING);
        }
        void_replace_bat5(o, d,FALSE);
-       BBPreleaseref(*r = o->batCacheid);
+       BBPkeepref(*r = o->batCacheid);
        BBPreleaseref(d->batCacheid);
        return MAL_SUCCEED;
 }
@@ -3047,7 +3059,7 @@
                throw(MAL, "bat.inplace", RUNTIME_OBJECT_MISSING);
        }
        void_replace_bat5(o, d, *force);
-       BBPreleaseref(*r = o->batCacheid);
+       BBPkeepref(*r = o->batCacheid);
        BBPreleaseref(d->batCacheid);
        return MAL_SUCCEED;
 }
@@ -3412,7 +3424,6 @@
                return MAL_SUCCEED;
        }
        BBPreleaseref(*bid);
-       BBPreleaseref(b->batCacheid);
        throw(MAL, "BKCinfo", GDK_EXCEPTION);
 }
 
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to