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