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