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 Checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list