Changeset: 4ed80ca4b79d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4ed80ca4b79d
Modified Files:
gdk/gdk_bat.c
gdk/gdk_bbp.c
gdk/gdk_cand.c
gdk/gdk_orderidx.c
Branch: default
Log Message:
Make sure farmid is set before HEAPalloc.
+ Make heap allocations all follow the same pattern.
diffs (214 lines):
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -607,6 +607,8 @@ BATclear(BAT *b, bool force)
}
*th = (Heap) {
.farmid = b->tvheap->farmid,
+ .parentid = b->tvheap->parentid,
+ .dirty = true,
};
strcpy_len(th->filename, b->tvheap->filename,
sizeof(th->filename));
if (ATOMheap(b->ttype, th, 0) != GDK_SUCCEED) {
@@ -614,8 +616,6 @@ BATclear(BAT *b, bool force)
return GDK_FAIL;
}
ATOMIC_INIT(&th->refs, 1);
- th->parentid = b->tvheap->parentid;
- th->dirty = true;
HEAPdecref(b->tvheap, false);
b->tvheap = th;
}
@@ -2547,6 +2547,8 @@ BATassertProps(BAT *b)
/* general BAT sanity */
assert(b != NULL);
assert(b->batCacheid > 0);
+ assert(b->batCacheid < getBBPsize());
+ assert(b == BBP_cache(b->batCacheid));
assert(b->batCount >= b->batInserted);
/* headless */
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -815,8 +815,8 @@ BBPreadEntries(FILE *fp, unsigned bbpver
BAT *bn;
Heap *hn;
- if ((bn = GDKzalloc(sizeof(BAT))) == NULL ||
- (hn = GDKzalloc(sizeof(Heap))) == NULL) {
+ if ((bn = GDKmalloc(sizeof(BAT))) == NULL ||
+ (hn = GDKmalloc(sizeof(Heap))) == NULL) {
GDKfree(bn);
TRC_CRITICAL(GDK, "cannot allocate memory for BAT.");
goto bailout;
diff --git a/gdk/gdk_cand.c b/gdk/gdk_cand.c
--- a/gdk/gdk_cand.c
+++ b/gdk/gdk_cand.c
@@ -1300,17 +1300,20 @@ BATnegcands(BUN nr, BAT *odels)
return bn;
nme = BBP_physical(bn->batCacheid);
- if ((dels = (Heap*)GDKzalloc(sizeof(Heap))) == NULL ||
- (dels->farmid = BBPselectfarm(bn->batRole, bn->ttype, varheap)) <
0){
- GDKfree(dels);
+ if ((dels = GDKmalloc(sizeof(Heap))) == NULL){
BBPreclaim(bn);
return NULL;
}
+ *dels = (Heap) {
+ .farmid = BBPselectfarm(bn->batRole, bn->ttype, varheap),
+ .parentid = bn->batCacheid,
+ .dirty = true,
+ };
strconcat_len(dels->filename, sizeof(dels->filename),
nme, ".theap", NULL);
- dels->parentid = bn->batCacheid;
- if (HEAPalloc(dels, hi - lo + (sizeof(ccand_t)/sizeof(oid)),
sizeof(oid)) != GDK_SUCCEED) {
+ if (dels->farmid < 0 ||
+ HEAPalloc(dels, hi - lo + (sizeof(ccand_t)/sizeof(oid)),
sizeof(oid)) != GDK_SUCCEED) {
GDKfree(dels);
BBPreclaim(bn);
return NULL;
@@ -1321,7 +1324,6 @@ BATnegcands(BUN nr, BAT *odels)
.type = CAND_NEGOID,
};
dels->free = sizeof(ccand_t) + sizeof(oid) * (hi - lo);
- dels->dirty = true;
BATiter bi = bat_iterator(odels);
if (bi.type == TYPE_void) {
oid *r = (oid *) (dels->base + sizeof(ccand_t));
@@ -1366,18 +1368,21 @@ BATmaskedcands(oid hseq, BUN nr, BAT *ma
return bn;
nme = BBP_physical(bn->batCacheid);
- if ((msks = (Heap*)GDKzalloc(sizeof(Heap))) == NULL ||
- (msks->farmid = BBPselectfarm(bn->batRole, bn->ttype, varheap)) <
0){
- GDKfree(msks);
+ if ((msks = GDKmalloc(sizeof(Heap))) == NULL){
BBPreclaim(bn);
return NULL;
}
+ *msks = (Heap) {
+ .farmid = BBPselectfarm(bn->batRole, bn->ttype, varheap),
+ .parentid = bn->batCacheid,
+ .dirty = true,
+ };
strconcat_len(msks->filename, sizeof(msks->filename),
nme, ".theap", NULL);
- msks->parentid = bn->batCacheid;
nmask = (nr + 31) / 32;
- if (HEAPalloc(msks, nmask + (sizeof(ccand_t)/sizeof(uint32_t)),
sizeof(uint32_t)) != GDK_SUCCEED) {
+ if (msks->farmid < 0 ||
+ HEAPalloc(msks, nmask + (sizeof(ccand_t)/sizeof(uint32_t)),
sizeof(uint32_t)) != GDK_SUCCEED) {
GDKfree(msks);
BBPreclaim(bn);
return NULL;
@@ -1388,7 +1393,6 @@ BATmaskedcands(oid hseq, BUN nr, BAT *ma
// .mask = true,
};
msks->free = sizeof(ccand_t) + nmask * sizeof(uint32_t);
- msks->dirty = true;
uint32_t *r = (uint32_t*)(msks->base + sizeof(ccand_t));
BATiter bi = bat_iterator(masked);
if (selected) {
@@ -1479,17 +1483,21 @@ BATunmask(BAT *b)
return NULL;
}
Heap *dels;
- if ((dels = GDKzalloc(sizeof(Heap))) == NULL ||
- strconcat_len(dels->filename, sizeof(dels->filename),
- BBP_physical(bn->batCacheid), ".theap",
- NULL) >= sizeof(dels->filename) ||
- (dels->parentid = bn->batCacheid) <= 0 ||
- (dels->farmid = BBPselectfarm(TRANSIENT, TYPE_void,
- varheap)) == -1 ||
- HEAPalloc(dels,
- cnt * 32 - bi.count
- + sizeof(ccand_t) / sizeof(oid),
- sizeof(oid)) != GDK_SUCCEED) {
+ if ((dels = GDKmalloc(sizeof(Heap))) == NULL) {
+ BBPreclaim(bn);
+ return NULL;
+ }
+ *dels = (Heap) {
+ .farmid = BBPselectfarm(TRANSIENT, TYPE_void, varheap),
+ .parentid = bn->batCacheid,
+ .dirty = true,
+ };
+ strconcat_len(dels->filename, sizeof(dels->filename),
+ BBP_physical(bn->batCacheid), ".theap", NULL);
+
+ if (dels->farmid < 0 ||
+ HEAPalloc(dels, cnt * 32 - bi.count
+ + sizeof(ccand_t) / sizeof(oid), sizeof(oid)) !=
GDK_SUCCEED) {
GDKfree(dels);
BBPreclaim(bn);
bat_iterator_end(&bi);
diff --git a/gdk/gdk_orderidx.c b/gdk/gdk_orderidx.c
--- a/gdk/gdk_orderidx.c
+++ b/gdk/gdk_orderidx.c
@@ -139,18 +139,21 @@ createOIDXheap(BAT *b, bool stable)
Heap *m;
oid *restrict mv;
- if ((m = GDKzalloc(sizeof(Heap))) == NULL ||
- (m->farmid = BBPselectfarm(b->batRole, b->ttype, orderidxheap)) < 0
||
- (m->parentid = b->batCacheid) <= 0 ||
- strconcat_len(m->filename, sizeof(m->filename),
- BBP_physical(b->batCacheid), ".torderidx",
- NULL) >= sizeof(m->filename) ||
+ if ((m = GDKmalloc(sizeof(Heap))) == NULL)
+ return NULL;
+ *m = (Heap) {
+ .farmid = BBPselectfarm(b->batRole, b->ttype, orderidxheap),
+ .parentid = b->batCacheid,
+ .dirty = true,
+ };
+ strconcat_len(m->filename, sizeof(m->filename),
+ BBP_physical(b->batCacheid), ".torderidx", NULL);
+ if (m->farmid < 0 ||
HEAPalloc(m, BATcount(b) + ORDERIDXOFF, SIZEOF_OID) != GDK_SUCCEED)
{
GDKfree(m);
return NULL;
}
m->free = (BATcount(b) + ORDERIDXOFF) * SIZEOF_OID;
- m->dirty = true;
mv = (oid *) m->base;
*mv++ = ORDERIDX_VERSION;
@@ -368,11 +371,19 @@ GDKmergeidx(BAT *b, BAT**a, int n_ar)
bat_iterator_end(&bi);
return GDK_SUCCEED;
}
- if ((m = GDKzalloc(sizeof(Heap))) == NULL ||
- (m->farmid = BBPselectfarm(b->batRole, bi.type, orderidxheap)) < 0
||
- (m->parentid = b->batCacheid) <= 0 ||
- strconcat_len(m->filename, sizeof(m->filename),
- nme, ".torderidx", NULL) >= sizeof(m->filename) ||
+ if ((m = GDKmalloc(sizeof(Heap))) == NULL) {
+ MT_lock_unset(&b->batIdxLock);
+ bat_iterator_end(&bi);
+ return GDK_FAIL;
+ }
+ *m = (Heap) {
+ .farmid = BBPselectfarm(b->batRole, bi.type, orderidxheap),
+ .parentid = b->batCacheid,
+ .dirty = true,
+ };
+ strconcat_len(m->filename, sizeof(m->filename),
+ nme, ".torderidx", NULL);
+ if (m->farmid < 0 ||
HEAPalloc(m, BATcount(b) + ORDERIDXOFF, SIZEOF_OID) != GDK_SUCCEED)
{
GDKfree(m);
MT_lock_unset(&b->batIdxLock);
@@ -380,7 +391,6 @@ GDKmergeidx(BAT *b, BAT**a, int n_ar)
return GDK_FAIL;
}
m->free = (BATcount(b) + ORDERIDXOFF) * SIZEOF_OID;
- m->dirty = true;
mv = (oid *) m->base;
*mv++ = ORDERIDX_VERSION;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]