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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list