Changeset: b27447dd6044 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b27447dd6044
Modified Files:
gdk/gdk_imprints.c
gdk/gdk_select.c
Branch: default
Log Message:
Better manage locks while deleting imprints from views.
diffs (93 lines):
diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c
--- a/gdk/gdk_imprints.c
+++ b/gdk/gdk_imprints.c
@@ -783,36 +783,39 @@ IMPSgetbin(int tpe, bte bits, char *inbi
void
IMPSremove(BAT *b) {
+ Imprints *imprints;
assert(BAThdense(b)); /* assert void head */
+ assert(b->T->imprints != NULL);
+
+ if (VIEWtparent(b)) {
+ b->T->imprints = NULL;
+ return;
+ }
MT_lock_set(&GDKimprintsLock(ABS(b->batCacheid)),
"BATimprints");
- if (VIEWtparent(b)) {
- b->T->imprints = NULL;
- } else if (b->T->imprints != NULL) {
- Imprints *imprints = b->T->imprints;
+ imprints = b->T->imprints;
+ b->T->imprints = NULL;
- if (imprints->imps->storage != STORE_MEM)
- HEAPdelete(imprints->imps,
- BBP_physical(b->batCacheid), "imps");
- else
- HEAPfree(imprints->imps);
- if (imprints->dict->storage != STORE_MEM)
- HEAPdelete(imprints->dict,
- BBP_physical(b->batCacheid), "dict");
- else
- HEAPfree(imprints->dict);
- if (imprints->bins->storage != STORE_MEM)
- HEAPdelete(imprints->bins,
- BBP_physical(b->batCacheid), "bins");
- else
- HEAPfree(imprints->bins);
+ if (imprints->imps->storage != STORE_MEM)
+ HEAPdelete(imprints->imps,
+ BBP_physical(b->batCacheid), "imps");
+ else
+ HEAPfree(imprints->imps);
+ if (imprints->dict->storage != STORE_MEM)
+ HEAPdelete(imprints->dict,
+ BBP_physical(b->batCacheid), "dict");
+ else
+ HEAPfree(imprints->dict);
+ if (imprints->bins->storage != STORE_MEM)
+ HEAPdelete(imprints->bins,
+ BBP_physical(b->batCacheid), "bins");
+ else
+ HEAPfree(imprints->bins);
+ GDKfree(imprints);
- GDKfree(imprints);
- b->T->imprints = NULL;
- }
MT_lock_unset(&GDKimprintsLock(ABS(b->batCacheid)),
"BATimprints");
@@ -822,11 +825,12 @@ IMPSremove(BAT *b) {
void
IMPSdestroy(BAT *b) {
- /* imprints are build on tails of BATs with void head */
if (b) {
- if (BAThdense(b) && (b->T->imprints != NULL)) {
+ if (b->T->imprints != NULL) {
IMPSremove(b);
- } else if (BATtdense(b) && (b->H->imprints != NULL)) {
+ }
+
+ if (b->H->imprints != NULL) {
IMPSremove(BATmirror(b));
}
}
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -1329,7 +1329,7 @@ BATsubselect(BAT *b, BAT *s, const void
int use_imprints = 0;
if (((b->batPersistence == PERSISTENT) ||
((parent = VIEWtparent(b)) &&
- BBPquickdesc(ABS(parent),0)->batPersistence == PERSISTENT))
+ (BBPquickdesc(ABS(parent),0)->batPersistence ==
PERSISTENT)))
&& !equi
&& !ATOMvarsized(b->ttype)) {
/* use imprints if
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list