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

Reply via email to