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

numerous reference-counting fixes


diffs (247 lines):

diff -r 1cc00ffc5e8f -r ab9d6ef27959 MonetDB5/src/modules/kernel/bat5.mx
--- a/MonetDB5/src/modules/kernel/bat5.mx       Sat Jun 19 21:02:37 2010 +0200
+++ b/MonetDB5/src/modules/kernel/bat5.mx       Sat Jun 19 21:03:57 2010 +0200
@@ -2404,7 +2404,7 @@
        }
        bn= BATrevert(b);
        if(bn==NULL ){
-               BBPkeepref(*ret= b->batCacheid);
+               BBPreleaseref(b->batCacheid);
                throw(MAL, "bat.revert", GDK_EXCEPTION);
        }
        BBPkeepref(*ret= bn->batCacheid);
@@ -2420,11 +2420,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;
 }
 
@@ -2438,11 +2439,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;
 }
 
@@ -2513,13 +2515,13 @@
        }
        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);
        }
+       BBPkeepref(*r=b->batCacheid);
        BBPreleaseref(s->batCacheid);
-       BBPkeepref(*r=b->batCacheid);
        BBPreleaseref(i->batCacheid);
        return MAL_SUCCEED;
 }
@@ -2565,6 +2567,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);
@@ -2597,14 +2600,12 @@
                BBPreleaseref(i->batCacheid);
                BBPreleaseref(s->batCacheid);
                BBPreleaseref(b->batCacheid);
-               if( bn)
-                       BBPreleaseref(bn->batCacheid);
+               BBPreleaseref(bn->batCacheid);
                throw(MAL, "bat.replace", OPERATION_FAILED "Different BAT 
returned");
        }
        BBPkeepref(*r=bn->batCacheid);
        BBPreleaseref(i->batCacheid);
        BBPreleaseref(s->batCacheid);
-       BBPreleaseref(b->batCacheid);
        return MAL_SUCCEED;
 }
 
@@ -2619,13 +2620,15 @@
        @:derefStr(b,h,h)@
        @:derefStr(b,t,t)@
        bn= BUNreplace(b, h, t, *force);
-       BBPreleaseref(b->batCacheid);
        if (bn == NULL){
                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);
        return MAL_SUCCEED;
 }
@@ -2643,15 +2646,17 @@
                throw(MAL, "bat.replace", RUNTIME_OBJECT_MISSING);
        }
        bn= BATreplace(b, s, *force);
-       BBPreleaseref(s->batCacheid);
        if (bn == NULL){
                BBPreleaseref(b->batCacheid);
                throw(MAL, "bat.replace_bat", OPERATION_FAILED);
        }
-       BBPreleaseref(b->batCacheid);
-       if(bn->batCacheid != b->batCacheid)
+       if(bn->batCacheid != b->batCacheid) {
+               BBPreleaseref(b->batCacheid);
+               BBPreleaseref(bn->batCacheid);
                throw(MAL, "bat.replace_bat", OPERATION_FAILED "Different BAT 
returned");
+       }
        BBPkeepref(*r=bn->batCacheid);
+       BBPreleaseref(s->batCacheid);
        return MAL_SUCCEED;
 }
 
@@ -2670,10 +2675,12 @@
                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);
-       BBPreleaseref(b->batCacheid);
        return MAL_SUCCEED;
 }
 
@@ -2687,12 +2694,16 @@
        }
        @:derefStr(b,h,h)@
        bn= BUNdelHead(b, h,FALSE);
-       if (bn == NULL)
+       if (bn == NULL) {
+               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);
-       BBPreleaseref(b->batCacheid);
        return MAL_SUCCEED;
 }
 
@@ -2706,9 +2717,11 @@
        }
        bn=BATclear(b);
        if (bn == NULL){
+               BBPreleaseref(b->batCacheid);
                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");
        }
@@ -2732,15 +2745,17 @@
        }
 
        bn=BATdel(b, s,FALSE);
-       BBPreleaseref(s->batCacheid);
        if (bn == NULL){
                BBPreleaseref(b->batCacheid);
                throw(MAL, "bat.delete_bat_bun", OPERATION_FAILED);
        }
-       if(bn->batCacheid != b->batCacheid)
+       if(bn->batCacheid != b->batCacheid) {
+               BBPreleaseref(b->batCacheid);
+               BBPreleaseref(bn->batCacheid);
                throw(MAL, "bat.delete_bat_buns", OPERATION_FAILED "Different 
BAT returned");
+       }
        BBPkeepref(*r=bn->batCacheid);
-       BBPreleaseref(b->batCacheid);
+       BBPreleaseref(s->batCacheid);
        return MAL_SUCCEED;
 }
 
@@ -2758,10 +2773,11 @@
                throw(MAL, "bat.delete", RUNTIME_OBJECT_MISSING);
        }
        CMDsetaccess(&b,i,&param);
-       if (BATdelHead(b, s,FALSE) != NULL) {
+       if (BATdelHead(b, s,FALSE) == NULL) {
                BBPreleaseref(b->batCacheid);
                BBPreleaseref(s->batCacheid);
-               return MAL_SUCCEED;
+               BBPreleaseref(i->batCacheid);
+               throw(MAL, "bat.delete", OPERATION_FAILED);
        }
        BBPkeepref(*r=b->batCacheid);
        BBPreleaseref(s->batCacheid);
@@ -2970,7 +2986,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;
 }
 
@@ -2984,7 +3000,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;
 }
 
@@ -3002,7 +3018,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;
 }
@@ -3021,7 +3037,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;
 }
@@ -3385,7 +3401,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