Changeset: ce8d014bc7d4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ce8d014bc7d4
Modified Files:
gdk/gdk_imprints.c
gdk/gdk_unique.c
Branch: default
Log Message:
Added some error checking.
diffs (90 lines):
diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c
--- a/gdk/gdk_imprints.c
+++ b/gdk/gdk_imprints.c
@@ -563,18 +563,42 @@ BATimprints(BAT *b) {
if (imprints == NULL) {
GDKerror("#BATimprints: memory allocation error.\n");
MT_lock_unset(&GDKimprintsLock(abs(b->batCacheid)),
- "BATimprints");
+ "BATimprints");
return NULL;
}
#define SMP_SIZE 2048
s = BATsample(b, SMP_SIZE);
+ if (s == NULL) {
+ MT_lock_unset(&GDKimprintsLock(abs(b->batCacheid)),
+ "BATimprints");
+ GDKfree(imprints);
+ return NULL;
+ }
smp = BATsubunique(b, s);
BBPunfix(s->batCacheid);
+ if (smp == NULL) {
+ MT_lock_unset(&GDKimprintsLock(abs(b->batCacheid)),
+ "BATimprints");
+ GDKfree(imprints);
+ return NULL;
+ }
s = BATproject(smp,b);
BBPunfix(smp->batCacheid);
+ if (s == NULL) {
+ MT_lock_unset(&GDKimprintsLock(abs(b->batCacheid)),
+ "BATimprints");
+ GDKfree(imprints);
+ return NULL;
+ }
s->tkey=1; /* we know is unique on tail now */
- BATsubsort(&smp,NULL,NULL,s,NULL,NULL,0,0);
+ if (BATsubsort(&smp,NULL,NULL,s,NULL,NULL,0,0) == GDK_FAIL) {
+ MT_lock_unset(&GDKimprintsLock(abs(b->batCacheid)),
+ "BATimprints");
+ BBPunfix(s->batCacheid);
+ GDKfree(imprints);
+ return NULL;
+ }
BBPunfix(s->batCacheid);
/* smp now is ordered and unique on tail */
assert(smp->tkey && smp->tsorted);
@@ -592,7 +616,7 @@ BATimprints(BAT *b) {
GDKfree(imprints);
BBPunfix(smp->batCacheid);
MT_lock_unset(&GDKimprintsLock(abs(b->batCacheid)),
- "BATimprints");
+ "BATimprints");
return NULL;
}
sprintf(imprints->bins->filename, "%s.bins", nme);
@@ -601,7 +625,7 @@ BATimprints(BAT *b) {
GDKfree(imprints->bins);
GDKfree(imprints);
MT_lock_unset(&GDKimprintsLock(abs(b->batCacheid)),
- "BATimprints");
+ "BATimprints");
return NULL;
}
diff --git a/gdk/gdk_unique.c b/gdk/gdk_unique.c
--- a/gdk/gdk_unique.c
+++ b/gdk/gdk_unique.c
@@ -97,9 +97,17 @@ BATsubunique(BAT *b, BAT *s)
}
if (cand && BATcount(b) > 16 * BATcount(s)) {
- BAT *nb = BATproject(s, b);
- BAT *r = BATsubunique(nb, 0);
- BAT *nr = BATproject(r, s);
+ BAT *nb, *r, *nr;
+
+ nb = BATproject(s, b);
+ if (nb == NULL)
+ return NULL;
+ r = BATsubunique(nb, NULL);
+ if (r == NULL) {
+ BBPunfix(nb->batCacheid);
+ return NULL;
+ }
+ nr = BATproject(r, s);
BBPunfix(nb->batCacheid);
BBPunfix(r->batCacheid);
return nr;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list