Changeset: 324288fdface for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=324288fdface
Modified Files:
        gdk/gdk.h
        gdk/gdk_align.c
        gdk/gdk_bat.c
        gdk/gdk_bbp.c
        gdk/gdk_private.h
        gdk/gdk_storage.c
Branch: default
Log Message:

Get rid of the mirror BAT structure.
BBP_cache now only accepts non-negative arguments and returns the only
remaining BAT structure.


diffs (224 lines):

diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1728,7 +1728,7 @@ gdk_export void GDKqsort_rev(void *h, vo
  * field.
  */
 typedef struct {
-       BAT *cache[2];          /* if loaded: BAT* handle + reverse */
+       BAT *cache;             /* if loaded: BAT* handle */
        str logical[2];         /* logical name + reverse */
        str bak[2];             /* logical name + reverse backups */
        bat next[2];            /* next BBP slot in linked list */
@@ -1754,7 +1754,7 @@ gdk_export bat BBPlimit;
 gdk_export BBPrec *BBP[N_BBPINIT];
 
 /* fast defines without checks; internal use only  */
-#define BBP_cache(i)   BBP[abs(i)>>BBPINITLOG][abs(i)&(BBPINIT-1)].cache[(i)<0]
+#define BBP_cache(i)   BBP[(i)>>BBPINITLOG][(i)&(BBPINIT-1)].cache
 #define BBP_logical(i) 
BBP[abs(i)>>BBPINITLOG][abs(i)&(BBPINIT-1)].logical[(i)<0]
 #define BBP_bak(i)     BBP[abs(i)>>BBPINITLOG][abs(i)&(BBPINIT-1)].bak[(i)<0]
 #define BBP_next(i)    BBP[abs(i)>>BBPINITLOG][abs(i)&(BBPINIT-1)].next[(i)<0]
diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c
--- a/gdk/gdk_align.c
+++ b/gdk/gdk_align.c
@@ -397,8 +397,6 @@ VIEWreset(BAT *b)
        tp = -VIEWtparent(b);
        tvp = VIEWvtparent(b);
        if (tp || tvp) {
-               BAT *m;
-               BATstore *bs;
                BUN cnt;
                str nme;
                size_t nmelen;
@@ -407,7 +405,6 @@ VIEWreset(BAT *b)
                memset(&head, 0, sizeof(Heap));
                memset(&tail, 0, sizeof(Heap));
 
-               bs = BBP_desc(b->batCacheid);
                cnt = BATcount(b) + 1;
                nme = BBP_physical(b->batCacheid);
                nmelen = nme ? strlen(nme) : 0;
@@ -453,12 +450,6 @@ VIEWreset(BAT *b)
                        BBPunfix(tvp);
                }
 
-               /* make sure everything points there */
-               m = BBP_cache(-b->batCacheid);
-               m->S = b->S = &bs->S;
-               m->T = b->H = &bs->H;
-               m->H = b->T = &bs->T;
-
                b->H->type = TYPE_void;
                b->H->varsized = 1;
                b->H->shift = 0;
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -87,9 +87,6 @@ BATcreatedesc(oid hseq, int tt, int heap
         * assert needed in the kernel to get symbol eprintf resolved.
         * Else modules using assert fail to load.
         */
-       bs->BM.H = &bs->T;
-       bs->BM.T = &bs->H;
-       bs->BM.S = &bs->S;
        bs->B.H = &bs->H;
        bs->B.T = &bs->T;
        bs->B.S = &bs->S;
@@ -531,8 +528,6 @@ BATfree(BAT *b)
                assert(b->T->vheap->parentid == b->batCacheid);
                HEAPfree(b->T->vheap, 0);
        }
-
-       BBP_cache(-b->batCacheid) = NULL;
 }
 
 /* free a cached BAT descriptor */
@@ -2294,17 +2289,11 @@ BATassertTailProps(BAT *b)
 void
 BATassertProps(BAT *b)
 {
-       BAT *bm;
        int bbpstatus;
 
        /* general BAT sanity */
        assert(b != NULL);
        assert(b->batCacheid > 0);
-       bm = BBP_cache(-b->batCacheid);
-       assert(bm != NULL);
-       assert(b->H == bm->T);
-       assert(b->T == bm->H);
-       assert(b->S == bm->S);
        assert(b->batDeleted < BUN_MAX);
        assert(b->batFirst >= b->batDeleted);
        assert(b->batInserted >= b->batFirst);
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -658,15 +658,6 @@ fixoidheap(void)
                else
                        bnme++;
                sprintf(filename, "BACKUP%c%s", DIR_SEP, bnme);
-               srcdir = GDKfilepath(bs->H.heap.farmid, BATDIR, nme, NULL);
-               *strrchr(srcdir, DIR_SEP) = 0;
-
-               if (bs->H.type == TYPE_oid ||
-                   (bs->H.varsized && bs->H.type != TYPE_void)) {
-                       assert(bs->H.type != TYPE_oid || bs->H.width == 4);
-                       fixoidheapcolumn(&bs->BM, srcdir, nme, filename, 
"head", "hheap");
-               }
-               GDKfree(srcdir);
                srcdir = GDKfilepath(bs->T.heap.farmid, BATDIR, nme, NULL);
                *strrchr(srcdir, DIR_SEP) = 0;
                if (bs->T.type == TYPE_oid ||
@@ -1120,10 +1111,6 @@ BBPreadEntries(FILE *fp, int *min_stamp,
                bs->B.T = &bs->T;
                bs->B.S = &bs->S;
                bs->B.batCacheid = bid;
-               bs->BM.H = &bs->T;
-               bs->BM.T = &bs->H;
-               bs->BM.S = &bs->S;
-               bs->BM.batCacheid = -bid;
                BATroles(&bs->B, NULL, NULL);
                bs->S.persistence = PERSISTENT;
                bs->S.copiedtodisk = 1;
@@ -2078,8 +2065,6 @@ BBPinsert(BATstore *bs)
 
        assert(bs->B.H != NULL);
        assert(bs->B.T != NULL);
-       assert(bs->B.H == bs->BM.T);
-       assert(bs->B.T == bs->BM.H);
 
        /* critical section: get a new BBP entry */
        if (lock) {
@@ -2125,7 +2110,6 @@ BBPinsert(BATstore *bs)
 
        bs->S.stamp = ATOMIC_INC(BBP_curstamp, BBP_curstampLock) & 0x7fffffff;
        bs->B.batCacheid = i;
-       bs->BM.batCacheid = -i;
        bs->S.tid = MT_getpid();
 
        BBP_status_set(i, BBPDELETING, "BBPinsert");
@@ -2180,8 +2164,6 @@ BBPcacheit(BATstore *bs, int lock)
                        bs->T.vheap->parentid = i;
        }
        assert(bs->B.batCacheid > 0);
-       assert(bs->BM.batCacheid < 0);
-       assert(bs->B.batCacheid == -bs->BM.batCacheid);
 
        if (lock)
                MT_lock_set(&GDKswapLock(i));
@@ -2192,7 +2174,6 @@ BBPcacheit(BATstore *bs, int lock)
 
        /* cache it! */
        BBP_cache(i) = &bs->B;
-       BBP_cache(-i) = &bs->BM;
 
        if (lock)
                MT_lock_unset(&GDKswapLock(i));
@@ -2216,7 +2197,7 @@ BBPuncacheit(bat i, int unloaddesc)
                        if (BBP_cache(i)) {
                                BATDEBUG fprintf(stderr, "#uncache %d (%s)\n", 
(int) i, BBPname(i));
 
-                               BBP_cache(i) = BBP_cache(-i) = NULL;
+                               BBP_cache(i) = NULL;
 
                                /* clearing bits can be done without the lock */
                                BBP_status_off(i, BBPLOADED, "BBPuncacheit");
@@ -2555,14 +2536,14 @@ decref(bat i, int logical, int releaseSh
                        assert(b == NULL || b->T->vheap == NULL || 
b->T->vheap->parentid == 0 || BBP_refs(b->T->vheap->parentid) > 0);
                        refs = --BBP_refs(i);
                        if (b && refs == 0) {
-                               if ((tp = b->T->heap.parentid) != 0 &&
+                               if ((tp = -b->T->heap.parentid) != 0 &&
                                    b->H != b->T)
-                                       b->T->heap.base = (char *) 
(b->T->heap.base - BBP_cache(tp)->H->heap.base);
+                                       b->T->heap.base = (char *) 
(b->T->heap.base - BBP_cache(tp)->T->heap.base);
                                /* if a view shared the hash with its
                                 * parent, indicate this, but only if
                                 * view isn't getting destroyed */
                                if (tp && b->T->hash &&
-                                   b->T->hash == BBP_cache(tp)->H->hash)
+                                   b->T->hash == BBP_cache(tp)->T->hash)
                                        b->T->hash = (Hash *) -1;
                                tvp = VIEWvtparent(b);
                        }
@@ -2614,9 +2595,9 @@ decref(bat i, int logical, int releaseSh
                }
        }
        if (tp)
-               decref(abs(tp), FALSE, FALSE, lock);
+               decref(tp, FALSE, FALSE, lock);
        if (tvp)
-               decref(abs(tvp), FALSE, FALSE, lock);
+               decref(tvp, FALSE, FALSE, lock);
        return refs;
 }
 
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -32,7 +32,6 @@ enum heaptype {
  */
 struct BATstore {
        BAT B;                  /* storage for BAT descriptor */
-       BAT BM;                 /* mirror (reverse) BAT */
        COLrec H;               /* storage for head column */
        COLrec T;               /* storage for tail column */
        BATrec S;               /* the BAT properties */
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -753,11 +753,7 @@ BATsave(BAT *bd)
         * only read it. */
        bs = *BBP_desc(b->batCacheid);
        /* fix up internal pointers */
-       b = &bs.BM;             /* first the mirror */
-       b->S = &bs.S;
-       b->H = &bs.T;
-       b->T = &bs.H;
-       b = &bs.B;              /* then the unmirrored version */
+       b = &bs.B;
        b->S = &bs.S;
        b->H = &bs.H;
        b->T = &bs.T;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to