Changeset: 744a7ea93ec4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=744a7ea93ec4
Modified Files:
monetdb5/modules/kernel/group.mx
Branch: default
Log Message:
Fix some reference counting in group and derive.
diffs (79 lines):
diff --git a/monetdb5/modules/kernel/group.mx b/monetdb5/modules/kernel/group.mx
--- a/monetdb5/modules/kernel/group.mx
+++ b/monetdb5/modules/kernel/group.mx
@@ -560,8 +560,7 @@ GRPsubgroup1(bat *ngid, bat *next, bat *
str
GRPgroup(bat *rethisto, bat *retbid, bat *bid)
{
- BAT *b, *gn, *hn, *en, *t;
- BAT *b1, *map;
+ BAT *b, *gn, *hn, *en, *t, *map;
if ((b = BATdescriptor(*bid)) == NULL)
throw(MAL, "group.new", RUNTIME_OBJECT_MISSING);
@@ -572,17 +571,19 @@ GRPgroup(bat *rethisto, bat *retbid, bat
}
if (!BAThdense(b)) {
map = BATmark(b, 0); /* [head,dense] */
- b1 = BATmirror(BATmark(BATmirror(b), 0)); /* [dense,tail] */
+ t = BATmirror(BATmark(BATmirror(b), 0)); /* [dense,tail] */
+ BBPreleaseref(b->batCacheid);
+ b = t;
} else {
map = NULL;
- b1 = b;
}
- if (BATgroup(&gn, &en, &hn, b1, NULL, NULL, NULL) == GDK_FAIL) {
+ if (BATgroup(&gn, &en, &hn, b, NULL, NULL, NULL) == GDK_FAIL) {
BBPreleaseref(b->batCacheid);
+ if (map)
+ BBPreleaseref(map->batCacheid);
throw(MAL, "group.new", GDK_EXCEPTION);
}
if (map) {
- BBPreleaseref(b1->batCacheid);
t = BATleftfetchjoin(map, gn, BATcount(gn));
BBPreleaseref(gn->batCacheid);
gn = t;
@@ -609,8 +610,7 @@ GRPgroup(bat *rethisto, bat *retbid, bat
str
GRPderive(bat *hid, bat *mid, bat *ct_histoid, bat *ct_mapid, bat *bid)
{
- BAT *h, *g, *b, *gn, *t, *en, *hn;
- BAT *b1, *g1, *map;
+ BAT *h, *g, *b, *gn, *en, *hn, *t, *map;
h = BATdescriptor(*ct_histoid);
g = BATdescriptor(*ct_mapid);
@@ -634,22 +634,24 @@ GRPderive(bat *hid, bat *mid, bat *ct_hi
}
if (!BAThdense(b) || !BAThdense(g)) {
map = BATmark(b, 0); /* [head,dense] */
- b1 = BATmirror(BATmark(BATmirror(b), 0)); /* [dense,tail] */
- g1 = BATmirror(BATmark(BATmirror(g), 0)); /* [dense,tail] */
+ t = BATmirror(BATmark(BATmirror(b), 0)); /* [dense,tail] */
+ BBPreleaseref(b->batCacheid);
+ b = t;
+ t = BATmirror(BATmark(BATmirror(g), 0)); /* [dense,tail] */
+ BBPreleaseref(g->batCacheid);
+ g = t;
} else {
map = NULL;
- b1 = b;
- g1 = g;
}
- if (BATgroup(&gn, &en, &hn, b1, g1, NULL, NULL) == GDK_FAIL) {
+ if (BATgroup(&gn, &en, &hn, b, g, NULL, NULL) == GDK_FAIL) {
BBPreleaseref(h->batCacheid);
BBPreleaseref(g->batCacheid);
BBPreleaseref(b->batCacheid);
+ if (map)
+ BBPreleaseref(map->batCacheid);
throw(MAL, "group.new", GDK_EXCEPTION);
}
if (map) {
- BBPreleaseref(b1->batCacheid);
- BBPreleaseref(g1->batCacheid);
t = BATleftfetchjoin(map, gn, BATcount(gn));
BBPreleaseref(gn->batCacheid);
gn = t;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list