Changeset: cb9f0b02d1c6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/cb9f0b02d1c6
Modified Files:
monetdb5/mal/mal_profiler.c
monetdb5/modules/atoms/blob.c
monetdb5/modules/atoms/uuid.c
sql/backends/monet5/sql_cast.c
sql/backends/monet5/sql_rank.c
Branch: Jul2021
Log Message:
Retain when possible and don't leak on error
diffs (201 lines):
diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -317,8 +317,11 @@ renderProfilerEvent(Client cntxt, MalBlk
tname = getTypeName(getBatType(tpe));
ok = logadd(&logbuf, ",\"type\":\"bat[:%s]\"",
tname);
GDKfree(tname);
- if (!ok)
+ if (!ok) {
+ if (d)
+ BBPunfix(d->batCacheid);
return;
+ }
if(d) {
BAT *v;
cnt = BATcount(d);
@@ -331,11 +334,15 @@ renderProfilerEvent(Client cntxt, MalBlk
",\"mode\":\"%s\"",
VIEWtparent(d),
d->hseqbase,
- v &&
!v->batTransient ? "persistent" : "transient"))
- return;
+ v &&
!v->batTransient ? "persistent" : "transient")) {
+
BBPunfix(d->batCacheid);
+
return;
+ }
} else {
- if (!logadd(&logbuf,
",\"mode\":\"%s\"", (d->batTransient ? "transient" : "persistent")))
+ if (!logadd(&logbuf,
",\"mode\":\"%s\"", (d->batTransient ? "transient" : "persistent"))) {
+ BBPunfix(d->batCacheid);
return;
+ }
}
if (!logadd(&logbuf,
",\"sorted\":%d"
@@ -347,8 +354,10 @@ renderProfilerEvent(Client cntxt, MalBlk
d->trevsorted,
d->tnonil,
d->tnil,
- d->tkey))
+ d->tkey)) {
+ BBPunfix(d->batCacheid);
return;
+ }
#define keepprop(NME, LNME)
\
do {
\
const void *valp = BATgetprop(d, NME);
\
@@ -359,8 +368,10 @@ renderProfilerEvent(Client cntxt, MalBlk
ok = logadd(&logbuf, ",\"%s\":\"%s\"", LNME,
cvquote); \
GDKfree(cv);
\
GDKfree(cvquote);
\
- if (!ok)
\
+ if (!ok) {
\
+ BBPunfix(d->batCacheid);
\
return;
\
+ }
\
}
\
}
\
} while (0)
@@ -379,22 +390,31 @@ renderProfilerEvent(Client cntxt, MalBlk
*c = 0;
ok = logadd(&logbuf,
",\"file\":\"%s\"", cv + 1);
GDKfree(cv);
- if (!ok)
+ if (!ok) {
+ BBPunfix(d->batCacheid);
return;
+ }
total += cnt << d->tshift;
- if (!logadd(&logbuf, ",\"width\":%d",
d->twidth))
+ if (!logadd(&logbuf, ",\"width\":%d",
d->twidth)) {
+ BBPunfix(d->batCacheid);
return;
+ }
/* keeping information about the
individual auxiliary heaps is helpful during analysis. */
MT_rwlock_rdlock(&d->thashlock);
if( d->thash && !logadd(&logbuf,
",\"hash\":" LLFMT, (lng) hashinfo(d->thash, d->batCacheid))) {
MT_rwlock_rdunlock(&d->thashlock);
+ BBPunfix(d->batCacheid);
return;
}
MT_rwlock_rdunlock(&d->thashlock);
- if( d->tvheap && !logadd(&logbuf,
",\"vheap\":" LLFMT, (lng) heapinfo(d->tvheap, d->batCacheid)))
+ if( d->tvheap && !logadd(&logbuf,
",\"vheap\":" LLFMT, (lng) heapinfo(d->tvheap, d->batCacheid))) {
+ BBPunfix(d->batCacheid);
return;
- if( d->timprints && !logadd(&logbuf,
",\"imprints\":" LLFMT, (lng) IMPSimprintsize(d)))
+ }
+ if( d->timprints && !logadd(&logbuf,
",\"imprints\":" LLFMT, (lng) IMPSimprintsize(d))) {
+ BBPunfix(d->batCacheid);
return;
+ }
/* if (!logadd(&logbuf,
"\"debug\":\"%s\",", d->debugmessages)) return; */
BBPunfix(d->batCacheid);
}
diff --git a/monetdb5/modules/atoms/blob.c b/monetdb5/modules/atoms/blob.c
--- a/monetdb5/modules/atoms/blob.c
+++ b/monetdb5/modules/atoms/blob.c
@@ -438,19 +438,19 @@ BLOBblob_blob_bulk(bat *res, const bat *
oid off;
bool nils = false;
- if ((b = BATdescriptor(*bid)) == NULL) {
- msg = createException(SQL, "batcalc.blob_blob_bulk",
SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
- goto bailout;
- }
if (sid && !is_bat_nil(*sid)) {
if ((s = BATdescriptor(*sid)) == NULL) {
msg = createException(SQL, "batcalc.blob_blob_bulk",
SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
goto bailout;
}
} else {
- BBPkeepref(*res = b->batCacheid); /* nothing to convert, return
*/
+ BBPretain(*res = *bid); /* nothing to convert, return */
return MAL_SUCCEED;
}
+ if ((b = BATdescriptor(*bid)) == NULL) {
+ msg = createException(SQL, "batcalc.blob_blob_bulk",
SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
+ goto bailout;
+ }
off = b->hseqbase;
q = canditer_init(&ci, b, s);
if (!(dst = COLnew(ci.hseq, TYPE_blob, q, TRANSIENT))) {
diff --git a/monetdb5/modules/atoms/uuid.c b/monetdb5/modules/atoms/uuid.c
--- a/monetdb5/modules/atoms/uuid.c
+++ b/monetdb5/modules/atoms/uuid.c
@@ -186,19 +186,19 @@ UUIDuuid2uuid_bulk(bat *res, const bat *
bool nils = false;
BATiter bi;
- if ((b = BATdescriptor(*bid)) == NULL) {
- msg = createException(SQL, "batcalc.uuid2uuidbulk",
SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
- goto bailout;
- }
if (sid && !is_bat_nil(*sid)) {
if ((s = BATdescriptor(*sid)) == NULL) {
msg = createException(SQL, "batcalc.uuid2uuidbulk",
SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
goto bailout;
}
} else {
- BBPkeepref(*res = b->batCacheid); /* nothing to convert, return
*/
+ BBPretain(*res = *bid); /* nothing to convert, return */
return MAL_SUCCEED;
}
+ if ((b = BATdescriptor(*bid)) == NULL) {
+ msg = createException(SQL, "batcalc.uuid2uuidbulk",
SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
+ goto bailout;
+ }
off = b->hseqbase;
q = canditer_init(&ci, b, s);
if (!(dst = COLnew(ci.hseq, TYPE_uuid, q, TRANSIENT))) {
diff --git a/sql/backends/monet5/sql_cast.c b/sql/backends/monet5/sql_cast.c
--- a/sql/backends/monet5/sql_cast.c
+++ b/sql/backends/monet5/sql_cast.c
@@ -245,8 +245,8 @@ SQLbatstr_cast(Client cntxt, MalBlkPtr m
if (!strNil(v))
SQLstr_cast_str(v, digits);
}
+ bat_iterator_end(&bi);
BBPkeepref(*res = b->batCacheid);
- bat_iterator_end(&bi);
return MAL_SUCCEED;
}
diff --git a/sql/backends/monet5/sql_rank.c b/sql/backends/monet5/sql_rank.c
--- a/sql/backends/monet5/sql_rank.c
+++ b/sql/backends/monet5/sql_rank.c
@@ -48,12 +48,12 @@ SQLdiff(Client cntxt, MalBlkPtr mb, MalS
gdk_return gdk_code = GDK_SUCCEED;
res = getArgReference_bat(stk, pci, 0);
- if ((!(b = BATdescriptor(*getArgReference_bat(stk, pci, 1))))) {
- msg = createException(SQL, "sql.diff", SQLSTATE(HY005)
"Cannot access column descriptor");
- goto bailout;
- }
if (pci->argc > 2) {
if (isaBatType(getArgType(mb, pci, 2))) {
+ if ((!(b =
BATdescriptor(*getArgReference_bat(stk, pci, 1))))) {
+ msg = createException(SQL, "sql.diff",
SQLSTATE(HY005) "Cannot access column descriptor");
+ goto bailout;
+ }
if (!(r = COLnew(b->hseqbase, TYPE_bit,
BATcount(b), TRANSIENT))) {
msg = createException(SQL, "sql.diff",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
goto bailout;
@@ -65,11 +65,14 @@ SQLdiff(Client cntxt, MalBlkPtr mb, MalS
}
gdk_code = GDKanalyticaldiff(r, b, c, NULL,
b->ttype);
} else { /* the input is a constant, so the output is
the previous sql.diff output */
- assert(b->ttype == TYPE_bit);
- BBPkeepref(*res = b->batCacheid);
+ BBPretain(*res = *getArgReference_bat(stk, pci,
1));
return MAL_SUCCEED;
}
} else {
+ if ((!(b = BATdescriptor(*getArgReference_bat(stk, pci,
1))))) {
+ msg = createException(SQL, "sql.diff",
SQLSTATE(HY005) "Cannot access column descriptor");
+ goto bailout;
+ }
if (!(r = COLnew(b->hseqbase, TYPE_bit, BATcount(b),
TRANSIENT))) {
msg = createException(SQL, "sql.diff",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
goto bailout;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list