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

Reply via email to