Changeset: 3b40c80c9172 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3b40c80c9172
Modified Files:
MonetDB/src/gdk/gdk.mx
MonetDB/src/gdk/gdk_align.mx
MonetDB/src/gdk/gdk_bat.mx
MonetDB/src/gdk/gdk_bbp.mx
MonetDB/src/gdk/gdk_storage.mx
MonetDB4/src/modules/plain/bat.mx
MonetDB4/src/modules/plain/tcpip.mx
MonetDB5/src/modules/kernel/bat5.mx
MonetDB5/src/modules/mal/attach.mx
Branch: default
Log Message:
Avoid deadlock when a view needs its parent in incref.
diffs (179 lines):
diff -r cc206e92ebdb -r 3b40c80c9172 MonetDB/src/gdk/gdk.mx
--- a/MonetDB/src/gdk/gdk.mx Tue Jul 27 20:08:17 2010 +0200
+++ b/MonetDB/src/gdk/gdk.mx Tue Jul 27 13:44:44 2010 +0200
@@ -1830,7 +1830,7 @@
#define USE_ALL (USE_HEAD|USE_TAIL|USE_HHASH|USE_THASH)
gdk_export BAT *BATload(str nme);
-gdk_export BAT *BATload_intern(bat bid);
+gdk_export BAT *BATload_intern(bat bid, int lock);
#define BATaccessBegin(b,what,advice) BATaccess(b,what,advice,1)
#define BATaccessEnd(b,what,advice) BATaccess(b,what,advice,-1)
gdk_export size_t BATaccess(BAT *b, int what, int advice, int load);
diff -r cc206e92ebdb -r 3b40c80c9172 MonetDB/src/gdk/gdk_align.mx
--- a/MonetDB/src/gdk/gdk_align.mx Tue Jul 27 20:08:17 2010 +0200
+++ b/MonetDB/src/gdk/gdk_align.mx Tue Jul 27 13:44:44 2010 +0200
@@ -252,7 +252,7 @@
bn->batRestricted = BAT_READ;
if (recycled == NULL)
- BBPcacheit(bs); /* enter in BBP */
+ BBPcacheit(bs, 1); /* enter in BBP */
return bn;
}
@@ -348,7 +348,7 @@
else
bn->T->hash = t->T->hash;
if (recycled == NULL)
- BBPcacheit(bs); /* enter in BBP */
+ BBPcacheit(bs, 1); /* enter in BBP */
/* View of VIEW combine, ie we need to fix the head of the mirror */
if (vc) {
BAT *bm = BATmirror(bn);
diff -r cc206e92ebdb -r 3b40c80c9172 MonetDB/src/gdk/gdk_bat.mx
--- a/MonetDB/src/gdk/gdk_bat.mx Tue Jul 27 20:08:17 2010 +0200
+++ b/MonetDB/src/gdk/gdk_bat.mx Tue Jul 27 13:44:44 2010 +0200
@@ -299,7 +299,7 @@
return NULL;
}
DELTAinit(bn);
- BBPcacheit(bs);
+ BBPcacheit(bs, 1);
}
return bs;
}
@@ -373,7 +373,7 @@
bn->T->heap.size = (size_t) st.st_size;
bn->T->heap.newstorage = bn->T->heap.storage = (bn->T->heap.size <
REMAP_PAGE_MAXSIZE) ? STORE_MEM : STORE_MMAP;
HEAPload(&bn->T->heap, BBP_physical(bn->batCacheid), "tail", TRUE);
- BBPcacheit(bs);
+ BBPcacheit(bs, 1);
return bn;
}
diff -r cc206e92ebdb -r 3b40c80c9172 MonetDB/src/gdk/gdk_bbp.mx
--- a/MonetDB/src/gdk/gdk_bbp.mx Tue Jul 27 20:08:17 2010 +0200
+++ b/MonetDB/src/gdk/gdk_bbp.mx Tue Jul 27 13:44:44 2010 +0200
@@ -115,7 +115,7 @@
/* update interface */
gdk_export void BBPclear(bat bid);
gdk_export bat BBPinsert(BATstore *bs);
-gdk_export void BBPcacheit(BATstore *bs);
+gdk_export void BBPcacheit(BATstore *bs, int lock);
gdk_export void BBPuncacheit(bat bid);
gdk_export int BBPreclaim(BAT *b);
gdk_export int BBPsave(BAT *b);
@@ -1559,12 +1559,14 @@
}
void
-BBPcacheit(BATstore *bs)
+BBPcacheit(BATstore *bs, int lock)
{
- int lock = locked_by ? BBP_getpid() != locked_by : 1;
bat i = bs->B.batCacheid;
int mode;
+ if (lock)
+ lock = locked_by ? BBP_getpid() != locked_by : 1;
+
if (i) {
assert(i > 0);
} else {
@@ -2224,7 +2226,7 @@
if (load) {
IODEBUG THRprintf(GDKout, "#load %s\n", BBPname(i));
- b = BATload_intern(i);
+ b = BATload_intern(i, lock);
BBPin++;
/* clearing bits can be done without the lock */
@@ -2859,7 +2861,7 @@
if (b == NULL ||
complexatom(b->htype, delaccess) ||
complexatom(b->ttype, delaccess)) {
- b = BATload_intern(bid);
+ b = BATload_intern(bid, 1);
BBPin++;
}
return b;
diff -r cc206e92ebdb -r 3b40c80c9172 MonetDB/src/gdk/gdk_storage.mx
--- a/MonetDB/src/gdk/gdk_storage.mx Tue Jul 27 20:08:17 2010 +0200
+++ b/MonetDB/src/gdk/gdk_storage.mx Tue Jul 27 13:44:44 2010 +0200
@@ -587,7 +587,7 @@
TODO: move to gdk_bbp.mx
@c
BAT *
-BATload_intern(bat i)
+BATload_intern(bat i, int lock)
{
bat bid = ABS(i);
str nme = BBP_physical(bid);
@@ -672,7 +672,7 @@
b->batSharecnt = 0;
/* load succeeded; register it in BBP */
- BBPcacheit(bs);
+ BBPcacheit(bs, lock);
if (!DELTAdirty(b)) {
ALIGNcommit(b);
@@ -697,7 +697,7 @@
if (i == 0 || b != NULL) {
return b; /* nonexistent bat or already loaded */
}
- return BATload_intern(i);
+ return BATload_intern(i, 1);
}
@- BAT preload
diff -r cc206e92ebdb -r 3b40c80c9172 MonetDB4/src/modules/plain/bat.mx
--- a/MonetDB4/src/modules/plain/bat.mx Tue Jul 27 20:08:17 2010 +0200
+++ b/MonetDB4/src/modules/plain/bat.mx Tue Jul 27 13:44:44 2010 +0200
@@ -2082,7 +2082,7 @@
fix(BUNtail(bni, p));
}
}
- BBPcacheit(bs);
+ BBPcacheit(bs, 1);
if (mmappath) {
/* if copy-on-write was used, make bn a logical view on b */
bn->P->lview = TRUE;
diff -r cc206e92ebdb -r 3b40c80c9172 MonetDB4/src/modules/plain/tcpip.mx
--- a/MonetDB4/src/modules/plain/tcpip.mx Tue Jul 27 20:08:17 2010 +0200
+++ b/MonetDB4/src/modules/plain/tcpip.mx Tue Jul 27 13:44:44 2010 +0200
@@ -988,7 +988,7 @@
b->hsorted = hordered;
b->tsorted = tordered;
DELTAinit(b);
- BBPcacheit(b);
+ BBPcacheit(b, 1);
dst.bval = b->batCacheid;
@-
Read the data for its heaps. A BAT at least consists of a BUN heap.
diff -r cc206e92ebdb -r 3b40c80c9172 MonetDB5/src/modules/kernel/bat5.mx
--- a/MonetDB5/src/modules/kernel/bat5.mx Tue Jul 27 20:08:17 2010 +0200
+++ b/MonetDB5/src/modules/kernel/bat5.mx Tue Jul 27 13:44:44 2010 +0200
@@ -2047,7 +2047,7 @@
fix(BUNtail(bni, p));
}
}
- BBPcacheit(bs);
+ BBPcacheit(bs, 1);
if (mmappath) {
/* if copy-on-write was used, make bn a logical view on b */
bn->P->lview = TRUE;
diff -r cc206e92ebdb -r 3b40c80c9172 MonetDB5/src/modules/mal/attach.mx
--- a/MonetDB5/src/modules/mal/attach.mx Tue Jul 27 20:08:17 2010 +0200
+++ b/MonetDB5/src/modules/mal/attach.mx Tue Jul 27 13:44:44 2010 +0200
@@ -193,7 +193,7 @@
BATkey(BATmirror(bn), TRUE);
}
assert(cap);
- BBPcacheit(bs);
+ BBPcacheit(bs, 1);
BATsetcapacity(bn, cap);
BATsetcount(bn, cnt);
BATsetaccess(bn, BAT_READ);
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list