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,¶m); 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