Update of /cvsroot/monetdb/MonetDB/src/gdk
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv965/src/gdk

Modified Files:
        gdk.mx gdk_bbp.mx 
Log Message:
cleanup lock code (put the masking with the per thread bin into the macros in 
gdk.mx)


Index: gdk_bbp.mx
===================================================================
RCS file: /cvsroot/monetdb/MonetDB/src/gdk/gdk_bbp.mx,v
retrieving revision 1.204
retrieving revision 1.205
diff -u -d -r1.204 -r1.205
--- gdk_bbp.mx  24 Oct 2007 11:39:23 -0000      1.204
+++ gdk_bbp.mx  14 Nov 2007 12:38:09 -0000      1.205
@@ -269,7 +269,7 @@
 must be protected by GDKswapLock. 
 
 To reduce contention GDKswapLock was split into multiple locks; it is now 
-an array of lock pointers which is accessed by 
GDKswapLock[ABS(bat)\&BBP_BATMASK]
+an array of lock pointers which is accessed by GDKswapLock(ABS(bat))
 @end table
 
 Routines that need both locks should first acquire the locks in the 
GDKswapLock 
@@ -862,10 +862,10 @@
                                BBPclear(i);
                        } else if (BBP_desc(i) == NULL) {
                                if (lock)
-                                       gdk_set_lock(GDKswapLock(i & 
BBP_BATMASK), "BBPgetdesc");
+                                       gdk_set_lock(GDKswapLock(i), 
"BBPgetdesc");
                                BBP_desc(i) = (BATstore *) b;
                                if (lock)
-                                       gdk_unset_lock(GDKswapLock(i & 
BBP_BATMASK), "BBPgetdesc");
+                                       gdk_unset_lock(GDKswapLock(i), 
"BBPgetdesc");
                        }
                }
                if (b)
@@ -1033,7 +1033,7 @@
                i = BBPinsert(b);       /* bat was not previously entered */
        }
        if (lock)
-               gdk_set_lock(GDKswapLock(i & BBP_BATMASK), "BBPcacheit");
+               gdk_set_lock(GDKswapLock(i), "BBPcacheit");
        mode = (BBP_status(i) | BBPLOADED) & ~(BBPLOADING | BBPDELETING);
        BBP_status_set(i, mode, "BBPcacheit");
        BBP_lastused(i) = BBPLASTUSED(BBPstamp() + ((mode == BBPLOADED) ? 150 : 
0));
@@ -1052,7 +1052,7 @@
        BBP_cache(-i) = bm;
 
        if (lock)
-               gdk_unset_lock(GDKswapLock(i & BBP_BATMASK), "BBPcacheit");
+               gdk_unset_lock(GDKswapLock(i), "BBPcacheit");
 }
 
 @
@@ -1211,10 +1211,10 @@
                int lock = locked_by ? BBP_getpid() != locked_by : 1;
 
                if (lock)
-                       gdk_set_lock(GDKswapLock(i & BBP_BATMASK), "BBPrename");
+                       gdk_set_lock(GDKswapLock(i), "BBPrename");
                BBP_status_on(ABS(bid), BBPRENAMED, "BBPrename");
                if (lock)
-                       gdk_unset_lock(GDKswapLock(i & BBP_BATMASK), 
"BBPrename");
+                       gdk_unset_lock(GDKswapLock(i), "BBPrename");
                BBPdirty(1);
        }
        gdk_unset_lock(GDKnameLock, "BBPrename");
@@ -1273,14 +1273,15 @@
                i = -i;
        if (BBPcheck(i, "BBPincref")) {
                if (lock) {
-                       gdk_set_lock(GDKswapLock(i & BBP_BATMASK), "BBPincref");
+                       gdk_set_lock(GDKswapLock(i), "BBPincref");
 
                        while (BBP_status(i) & BBPUNSTABLE) {
-                               gdk_unset_lock(GDKswapLock(i & BBP_BATMASK), 
"BBPincref spin wait");
+                               gdk_unset_lock(GDKswapLock(i), "BBPincref spin 
wait");
                                MT_sleep_ms(1);
-                               gdk_set_lock(GDKswapLock(i & BBP_BATMASK), 
"BBPincref spin wait");
+                               gdk_set_lock(GDKswapLock(i), "BBPincref spin 
wait");
                        }
                }
+               assert(BBP_refs(i)+BBP_lrefs(i));
 
                /* got the lock */
                if (logical) {
@@ -1289,7 +1290,7 @@
                        refs = ++BBP_refs(i);
                }
                if (lock)
-                       gdk_unset_lock(GDKswapLock(i & BBP_BATMASK), "BBPfix");
+                       gdk_unset_lock(GDKswapLock(i), "BBPfix");
        }
        return refs;
 }
@@ -1306,18 +1307,15 @@
 BBPshare(bat parent)
 {
        int lock = locked_by ? BBP_getpid() != locked_by : 1;
-       int fix = 0;
 
        if (parent < 0)
                parent = -parent;
        if (lock)
-               gdk_set_lock(GDKswapLock(parent & BBP_BATMASK), "BBPshare");
+               gdk_set_lock(GDKswapLock(parent), "BBPshare");
        if (++BBP_cache(parent)->batSharecnt == 1)
-               fix = 1;
+               (void) incref(parent, FALSE, 0);
        if (lock)
-               gdk_unset_lock(GDKswapLock(parent & BBP_BATMASK), "BBPshare");
-       if (fix)
-               BBPincref(parent, FALSE);
+               gdk_unset_lock(GDKswapLock(parent), "BBPshare");
 }
 
 static INLINE int
@@ -1330,12 +1328,14 @@
        if (logical) {
                if (BBP_lrefs(i) == 0) {
                        GDKerror("BBPdecref: %s does not have logical 
references.\n", BBPname(i));
+                       assert(0);
                } else {
                        refs = --BBP_lrefs(i);
                }
        } else {
                if (BBP_refs(i) == 0) {
                        GDKerror("BBPdecref: %s does not have pointer 
fixes.\n", BBPname(i));
+                       assert(0);
                } else {
                        refs = --BBP_refs(i);
                }
@@ -1363,7 +1363,7 @@
 
        /* unlock before re-locking in unload; as saving a dirty persistent bat 
may take a long time */
        if (lock)
-               gdk_unset_lock(GDKswapLock(i & BBP_BATMASK), "BBPdecref");
+               gdk_unset_lock(GDKswapLock(i), "BBPdecref");
 
        if (swap_unloading) {
                BBPspin(i, "BBPdecref", BBPUNLOADING);  /* wait for unload to 
complete */
@@ -1393,7 +1393,7 @@
        if (i < 0)
                i = -i;
        if (lock)
-               gdk_set_lock(GDKswapLock(i & BBP_BATMASK), "BBPdecref");
+               gdk_set_lock(GDKswapLock(i), "BBPdecref");
        return decref(i, logical, lock);
 }
 
@@ -1415,20 +1415,21 @@
                i = -i;
        if (BBPcheck(i, "BBPkeepref")) {
                if (lock)
-                       gdk_set_lock(GDKswapLock(i & BBP_BATMASK), 
"BBPkeepref");
+                       gdk_set_lock(GDKswapLock(i), "BBPkeepref");
 
                while (BBP_status(i) & BBPUNLOADING) {
                        if (lock)
-                               gdk_unset_lock(GDKswapLock(i & BBP_BATMASK), 
"BBPincref spin wait");
+                               gdk_unset_lock(GDKswapLock(i), "BBPincref spin 
wait");
                        MT_sleep_ms(1);
                        if (lock)
-                               gdk_set_lock(GDKswapLock(i & BBP_BATMASK), 
"BBPincref spin wait");
+                               gdk_set_lock(GDKswapLock(i), "BBPincref spin 
wait");
                }
                /* got the lock */
                ++BBP_lrefs(i);
+               assert(BBP_refs(i));
                --BBP_refs(i);
                if (lock)
-                       gdk_unset_lock(GDKswapLock(i & BBP_BATMASK), "BBPfix");
+                       gdk_unset_lock(GDKswapLock(i), "BBPfix");
                /* decref(i, FALSE, lock); */
        }
 }
@@ -1443,21 +1444,23 @@
                i = -i;
        if (BBPcheck(i, "BBPreleaselref")) {
                if (lock)
-                       gdk_set_lock(GDKswapLock(i & BBP_BATMASK), 
"BBPreleaselref");
+                       gdk_set_lock(GDKswapLock(i), "BBPreleaselref");
 
                while (BBP_status(i) & BBPUNLOADING) {
                        if (lock)
-                               gdk_unset_lock(GDKswapLock(i & BBP_BATMASK), 
"BBPincref spin wait");
+                               gdk_unset_lock(GDKswapLock(i), "BBPincref spin 
wait");
                        MT_sleep_ms(1);
                        if (lock)
-                               gdk_set_lock(GDKswapLock(i & BBP_BATMASK), 
"BBPincref spin wait");
+                               gdk_set_lock(GDKswapLock(i), "BBPincref spin 
wait");
                }
                /* got the lock */
+               assert(BBP_lrefs(i));
                --BBP_lrefs(i);
                if (lock)
-                       gdk_unset_lock(GDKswapLock(i & BBP_BATMASK), "BBPfix");
+                       gdk_unset_lock(GDKswapLock(i), "BBPfix");
        }
 }
+
 void
 BBPreleaseref(bat i)
 {
@@ -1469,19 +1472,20 @@
                i = -i;
        if (BBPcheck(i, "BBPreleaseref")) {
                if (lock)
-                       gdk_set_lock(GDKswapLock(i & BBP_BATMASK), 
"BBPreleaseref");
+                       gdk_set_lock(GDKswapLock(i), "BBPreleaseref");
 
                while (BBP_status(i) & BBPUNLOADING) {
                        if (lock)
-                               gdk_unset_lock(GDKswapLock(i & BBP_BATMASK), 
"BBPincref spin wait");
+                               gdk_unset_lock(GDKswapLock(i), "BBPincref spin 
wait");
                        MT_sleep_ms(1);
                        if (lock)
-                               gdk_set_lock(GDKswapLock(i & BBP_BATMASK), 
"BBPincref spin wait");
+                               gdk_set_lock(GDKswapLock(i), "BBPincref spin 
wait");
                }
                /* got the lock */
+               assert(BBP_refs(i));
                --BBP_refs(i);
                if (lock)
-                       gdk_unset_lock(GDKswapLock(i & BBP_BATMASK), "BBPfix");
+                       gdk_unset_lock(GDKswapLock(i), "BBPfix");
        }
 }
 
@@ -1493,12 +1497,11 @@
        if (parent < 0)
                parent = -parent;
        if (lock)
-               gdk_set_lock(GDKswapLock(parent & BBP_BATMASK), "BBPunshare");
-       if (--BBP_cache(parent)->batSharecnt == 0) {
-               (void) decref(parent, FALSE, lock);
-       } else if (lock) {
-               gdk_unset_lock(GDKswapLock(parent & BBP_BATMASK), "BBPunshare");
-       }
+               gdk_set_lock(GDKswapLock(parent), "BBPunshare");
+       if (--BBP_cache(parent)->batSharecnt == 0) 
+               (void) decref(parent, FALSE, 0);
+       if (lock) 
+               gdk_unset_lock(GDKswapLock(parent), "BBPunshare");
 }
 
 void
@@ -1524,12 +1527,13 @@
        int ret = 0;
 
        if (lock)
-               gdk_set_lock(GDKswapLock(i & BBP_BATMASK), "BBPreclaim");
+               gdk_set_lock(GDKswapLock(i), "BBPreclaim");
 
        BATDEBUG THRprintf(GDKout, "#BBPreclaim: bat(%d) view=%d lrefs=%d 
ref=%d stat=%d\n", (int) b->batCacheid, b->batSharecnt, 
BBP_lrefs(b->batCacheid), BBP_refs(b->batCacheid), BBP_status(b->batCacheid));
 
        if (BBP_refs(b->batCacheid) > 1) {
                GDKerror("BBPreclaim: %d refs > 1 (%d)\n", i, BBP_refs(i));
+               assert(0);
                ret = -1;
        } else if (BBP_status(i) & BBPUNLOADING) {
                /* BBPtrim was unloading this bat that just now is getting 
killed. */
@@ -1540,7 +1544,7 @@
                BBP_status_on(i, BBPUNLOADING, "BBPreclaim");
        }
        if (lock)
-               gdk_unset_lock(GDKswapLock(i & BBP_BATMASK), "BBPreclaim");
+               gdk_unset_lock(GDKswapLock(i), "BBPreclaim");
 
        if (reclaim_while_unloading) {
                BBPspin(i, "BBPreclaim", BBPUNLOADING); /* wait for unload to 
complete */
@@ -1580,13 +1584,13 @@
        if ((b = BBP_cache(i)) == NULL) {
 
                if (lock)
-                       gdk_set_lock(GDKswapLock(j & BBP_BATMASK), 
"BBPdescriptor");
+                       gdk_set_lock(GDKswapLock(j), "BBPdescriptor");
                while (BBP_status(j) & BBPWAITING) {    /* wait for bat to be 
loaded by other thread */
                        if (lock)
-                               gdk_unset_lock(GDKswapLock(j & BBP_BATMASK), 
"BBPdescriptor");
+                               gdk_unset_lock(GDKswapLock(j), "BBPdescriptor");
                        MT_sleep_ms(1);
                        if (lock)
-                               gdk_set_lock(GDKswapLock(j & BBP_BATMASK), 
"BBPdescriptor");
+                               gdk_set_lock(GDKswapLock(j), "BBPdescriptor");
                }
                if (BBPvalid(j)) {
                        b = BBP_cache(i);
@@ -1596,7 +1600,7 @@
                        }
                }
                if (lock)
-                       gdk_unset_lock(GDKswapLock(j & BBP_BATMASK), 
"BBPdescriptor");
+                       gdk_unset_lock(GDKswapLock(j), "BBPdescriptor");
        }
        if (load) {
                IODEBUG THRprintf(GDKout, "#load %s\n", BBPname(i));
@@ -1628,13 +1632,13 @@
                return 0;
 
        if (lock)
-               gdk_set_lock(GDKswapLock(bid & BBP_BATMASK), "BBPsave");
+               gdk_set_lock(GDKswapLock(bid), "BBPsave");
 
        if (BBP_status(bid) & BBPSAVING) {
                /* wait until save in other thread completes */
                BBPspin(bid, "BBPsave", BBPSAVING);
                if (lock)
-                       gdk_unset_lock(GDKswapLock(bid & BBP_BATMASK), 
"BBPsave");
+                       gdk_unset_lock(GDKswapLock(bid), "BBPsave");
        } else {
                /* save it */
                int flags = BBPSAVING;
@@ -1648,7 +1652,7 @@
                }
                BBP_status_on(bid, flags, "BBPsave");
                if (lock)
-                       gdk_unset_lock(GDKswapLock(bid & BBP_BATMASK), 
"BBPsave");
+                       gdk_unset_lock(GDKswapLock(bid), "BBPsave");
 
                IODEBUG THRprintf(GDKout, "#save %s\n", BATgetId(b));
 
@@ -2032,7 +2036,7 @@
                for (i = 0; i <= BBP_THREADMASK; i++)
                        gdk_set_lock(GDKcacheLock(i), "BBPtrim");
                for (i = 0; i <= BBP_BATMASK; i++)
-                       gdk_set_lock(GDKswapLock(i & BBP_BATMASK), "BBPtrim");
+                       gdk_set_lock(GDKswapLock(i), "BBPtrim");
 
                /* gather a list of unload candidate BATs, but try to avoid 
scanning by reusing previous leftovers first */
                if (scan) {
@@ -2052,7 +2056,7 @@
 
                /* release the BBP locks */
                for (i = 0; i <= BBP_BATMASK; i++)
-                       gdk_unset_lock(GDKswapLock(i & BBP_BATMASK), "BBPtrim");
+                       gdk_unset_lock(GDKswapLock(i), "BBPtrim");
                for (i = 0; i <= BBP_THREADMASK; i++)
                        gdk_unset_lock(GDKcacheLock(i), "BBPtrim");
 
@@ -2094,10 +2098,10 @@
                int lock = locked_by ? BBP_getpid() != locked_by : 1;
 
                if (lock)
-                       gdk_set_lock(GDKswapLock(i & BBP_BATMASK), "BBPhot");
+                       gdk_set_lock(GDKswapLock(i), "BBPhot");
                BBP_lastused(i) = BBPLASTUSED(BBPstamp() + 30000);
                if (lock)
-                       gdk_unset_lock(GDKswapLock(i & BBP_BATMASK), "BBPhot");
+                       gdk_unset_lock(GDKswapLock(i), "BBPhot");
        }
 }
 
@@ -2112,7 +2116,7 @@
 
                gdk_set_lock(GDKtrimLock(pid & BBP_THREADMASK), "BBPcold");
                if (lock)
-                       gdk_set_lock(GDKswapLock(i & BBP_BATMASK), "BBPcold");
+                       gdk_set_lock(GDKswapLock(i), "BBPcold");
                /* make very cold and insert on top of trim list */
                BBP_lastused(i) = 0;
                if (BBP_cache(i) && bbptrimlast < bbptrimmax) {
@@ -2122,7 +2126,7 @@
                        bbptrimfirst = bbptrimmax;
                }
                if (lock)
-                       gdk_unset_lock(GDKswapLock(i & BBP_BATMASK), "BBPcold");
+                       gdk_unset_lock(GDKswapLock(i), "BBPcold");
                gdk_unset_lock(GDKtrimLock(pid & BBP_THREADMASK), "BBPcold");
        }
 }
@@ -2158,6 +2162,7 @@
 
        if (bid < 0) {
                GDKerror("BBPquickdesc: called with negative batid.\n");
+               assert(0);
                return NULL;
        }
        if (b) {
@@ -2518,23 +2523,21 @@
        b = BBP_cache(bid);
        if (b) {
                /* make the bat empty; do this extra work only if the bat is 
reused (not in BBPaddtobin) */
-               BAT *m = BBP_cache(-bid);
-
-               b->htype = m->ttype = ht;
+               b->htype = ht;
                b->H->varsized = BATatoms[b->htype].varsized;
                b->hsorted = ATOMlinear(ht) ? GDK_SORTED : 0;
                b->halign = 0;
-               b->hkey = m->tkey = FALSE;
+               b->hkey = FALSE;
                b->hdense = 0;
-               b->hseqbase = m->tseqbase = (ht == TYPE_void) ? oid_nil : 0;
+               b->hseqbase = (ht == TYPE_void) ? oid_nil : 0;
 
-               b->ttype = m->htype = tt;
+               b->ttype = tt;
                b->T->varsized = BATatoms[b->ttype].varsized;
                b->tsorted = ATOMlinear(tt) ? GDK_SORTED : 0;
                b->talign = 0;
-               b->tkey = m->hkey = FALSE;
+               b->tkey = FALSE;
                b->tdense = 0;
-               b->tseqbase = m->hseqbase = (tt == TYPE_void) ? oid_nil : 0;
+               b->tseqbase = (tt == TYPE_void) ? oid_nil : 0;
 
                b->batSet = FALSE;
                b->batFirst = b->batInserted = b->batDeleted = 0;
@@ -2758,7 +2761,7 @@
        int start_subcommit, ret = 0, set = 1 + subcommit;
 
        /* tmLock is only used here, helds usually very shortly just to protect 
the file counters */
-       gdk_unset_lock(GDKtmLock, "BBPprepare");
+       gdk_set_lock(GDKtmLock, "BBPprepare");
 
        start_subcommit = (subcommit && backup_subdir == 0);
        if (start_subcommit) {

Index: gdk.mx
===================================================================
RCS file: /cvsroot/monetdb/MonetDB/src/gdk/gdk.mx,v
retrieving revision 1.241
retrieving revision 1.242
diff -u -d -r1.241 -r1.242
--- gdk.mx      26 Oct 2007 13:59:38 -0000      1.241
+++ gdk.mx      14 Nov 2007 12:38:08 -0000      1.242
@@ -2337,11 +2337,11 @@
        bat free;
 } bbplock_t;
 
-#define GDKswapLock(x)  GDKbatLock[x].swap
-#define GDKhashLock(x)  GDKbatLock[x].hash
-#define GDKtrimLock(y)  GDKbbpLock[y].trim
-#define GDKcacheLock(y) GDKbbpLock[y].alloc
-#define BBP_free(y)     GDKbbpLock[y].free
+#define GDKswapLock(x)  GDKbatLock[(x&BBP_BATMASK)].swap
+#define GDKhashLock(x)  GDKbatLock[(x&BBP_BATMASK)].hash
+#define GDKtrimLock(y)  GDKbbpLock[(y&BBP_THREADMASK)].trim
+#define GDKcacheLock(y) GDKbbpLock[(y&BBP_THREADMASK)].alloc
+#define BBP_free(y)     GDKbbpLock[(y&BBP_THREADMASK)].free
 
 gdk_export batlock_t GDKbatLock[BBP_BATMASK + 1];
 gdk_export bbplock_t GDKbbpLock[BBP_THREADMASK + 1];


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Monetdb-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-checkins

Reply via email to