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