Changeset: 1cc00ffc5e8f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1cc00ffc5e8f
Modified Files:
MonetDB/src/gdk/gdk_bbp.mx
Branch: Feb2010
Log Message:
aligned BBPkeepref(), BBPreleaseref() & BBPreleaselref() with default
to plug BAT leaks, i.e., ensure that BATs with refcount 0 are indeed freed
diffs (105 lines):
diff -r 6d5d232ed8a1 -r 1cc00ffc5e8f MonetDB/src/gdk/gdk_bbp.mx
--- a/MonetDB/src/gdk/gdk_bbp.mx Tue Jun 15 13:41:10 2010 +0200
+++ b/MonetDB/src/gdk/gdk_bbp.mx Sat Jun 19 21:02:37 2010 +0200
@@ -1902,85 +1902,43 @@
void
BBPkeepref(bat i)
{
- int lock = locked_by ? BBP_getpid() != locked_by : 1;
-
if (i == bat_nil)
return;
if (i < 0)
i = -i;
if (BBPcheck(i, "BBPkeepref")) {
- if (lock)
- gdk_set_lock(GDKswapLock(i), "BBPkeepref");
-
- while (BBP_status(i) & BBPUNLOADING) {
- if (lock)
- gdk_unset_lock(GDKswapLock(i), "BBPincref spin
wait");
- BBPspin(i, "BBPkeepref", BBPUNLOADING);
- if (lock)
- gdk_set_lock(GDKswapLock(i), "BBPincref spin
wait");
- }
- /* got the lock */
- ++BBP_lrefs(i); /* incref(i, TRUE, FALSE); */
+ int lock = locked_by ? BBP_getpid() != locked_by : 1;
+
+ incref(i, TRUE, lock);
assert(BBP_refs(i));
- --BBP_refs(i); /* decref(i, FALSE, FALSE, FALSE); */
- if (lock)
- gdk_unset_lock(GDKswapLock(i), "BBPfix");
+ decref(i, FALSE, FALSE, lock);
}
}
+
void
BBPreleaselref(bat i)
{
int lock = locked_by ? BBP_getpid() != locked_by : 1;
- if (i == bat_nil || BBP_lrefs(i) <= 0)
+ if (i == bat_nil)
return;
if (i < 0)
i = -i;
- if (BBPcheck(i, "BBPreleaselref")) {
- if (lock)
- gdk_set_lock(GDKswapLock(i), "BBPreleaselref");
-
- while (BBP_status(i) & BBPUNLOADING) {
- if (lock)
- gdk_unset_lock(GDKswapLock(i), "BBPincref spin
wait");
- BBPspin(i, "BBPreleaselref", BBPUNLOADING);
- if (lock)
- gdk_set_lock(GDKswapLock(i), "BBPincref spin
wait");
- }
- /* got the lock */
- assert(BBP_lrefs(i));
- --BBP_lrefs(i); /* decref(i, TRUE, FALSE, FALSE); */
- if (lock)
- gdk_unset_lock(GDKswapLock(i), "BBPfix");
- }
+ assert(BBP_refs(i) > 0);
+ decref(i, TRUE, FALSE, lock);
}
void
BBPreleaseref(bat i)
{
- int lock = locked_by ? BBP_getpid() != locked_by : 1;
-
- if (i == bat_nil || BBP_refs(i) <= 0)
- return;
- if (i < 0)
- i = -i;
- if (BBPcheck(i, "BBPreleaseref")) {
- if (lock)
- gdk_set_lock(GDKswapLock(i), "BBPreleaseref");
-
- while (BBP_status(i) & BBPUNLOADING) {
- if (lock)
- gdk_unset_lock(GDKswapLock(i), "BBPincref spin
wait");
- BBPspin(i, "BBPreleaseref", BBPUNLOADING);
- if (lock)
- gdk_set_lock(GDKswapLock(i), "BBPincref spin
wait");
- }
- /* got the lock */
- assert(BBP_refs(i)); /* decref(i, FALSE, FALSE, FALSE); */
- --BBP_refs(i);
- if (lock)
- gdk_unset_lock(GDKswapLock(i), "BBPfix");
- }
+ int lock = locked_by ? BBP_getpid() != locked_by : 1;
+
+ if (i == bat_nil)
+ return;
+ if (i < 0)
+ i = -i;
+ assert(BBP_refs(i) > 0);
+ decref(i, FALSE, FALSE, lock);
}
static INLINE void
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list