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
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list