Changeset: 4bf8907cabc7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4bf8907cabc7
Modified Files:
clients/Tests/exports.stable.out
gdk/gdk.h
gdk/gdk_atoms.c
gdk/gdk_atoms.h
gdk/gdk_calc_convert.c
geom/monetdb5/geom.c
geom/monetdb5/geom.h
geom/monetdb5/geomBulk.c
monetdb5/mal/mal_exception.c
monetdb5/mal/mal_exception.h
monetdb5/mal/mal_instruction.c
monetdb5/mal/mal_listing.c
monetdb5/modules/mal/mal_io.c
monetdb5/modules/mal/mdb.c
monetdb5/optimizer/opt_remoteQueries.c
sql/backends/monet5/sql_scenario.c
Branch: Dec2025
Log Message:
Cleanup: use thread-local allocators in a bunch of places.
diffs (truncated from 800 to 300 lines):
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -9,7 +9,7 @@ int ATOMindex(const char *nme);
size_t ATOMlen(int id, const void *v);
const char *ATOMname(int id);
void *ATOMnil(int id) __attribute__((__malloc__));
-int ATOMprint(allocator *ma, int id, const void *val, stream *fd);
+int ATOMprint(int id, const void *val, stream *fd);
gdk_return BATaggrdigest(allocator *ma, BAT **bnp, char **shap, const char
*digest, BAT *b, BAT *g, BAT *e, BAT *s, bool skip_nils);
BAT *BATall_grp(BAT *l, BAT *g, BAT *e, BAT *s);
BAT *BATallnotequal_grp(BAT *l, BAT *r, BAT *g, BAT *e, BAT *s);
@@ -887,7 +887,7 @@ const char columnBindRef[];
const char comment_onRef[];
str compileString(Symbol *fcn, Client c, str s);
const char compressRef[];
-char *concatErrors(allocator *ma, char *err1, const char *err2)
__attribute__((__nonnull__(1, 2))) __attribute__((__returns_nonnull__));
+char *concatErrors(const char *err1, const char *err2)
__attribute__((__nonnull__(1, 2))) __attribute__((__returns_nonnull__));
const char connectRef[];
const char containsRef[];
str convertConstant(allocator *ma, malType type, ValPtr vr);
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1760,7 +1760,7 @@ gdk_export char *ma_strndup(allocator *s
gdk_export char *ma_strdup(allocator *sa, const char *s);
gdk_export char *ma_strconcat(allocator *sa, const char *s1, const char *s2);
gdk_export size_t ma_size(allocator *sa);
-gdk_export const char* ma_name(allocator *sa);
+gdk_export const char *ma_name(allocator *sa);
gdk_export allocator_state ma_open(allocator *sa); /* open new frame of
tempory allocations */
gdk_export void ma_close(allocator *sa, const allocator_state *); /* close
temporary frame, reset to old state */
gdk_export void ma_free(allocator *sa, void *);
diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -380,30 +380,32 @@ ATOMheap(int t, Heap *hp, size_t cap)
#define LINE_LEN 60
int
-ATOMprint(allocator *ma, int t, const void *p, stream *s)
+ATOMprint(int t, const void *p, stream *s)
{
ssize_t (*tostr) (allocator *ma, char **, size_t *, const void *, bool);
ssize_t res;
if (p && t >= 0 && t < GDKatomcnt && (tostr = BATatoms[t].atomToStr)) {
size_t sz;
+ allocator *ta = MT_thread_getallocator();
+ allocator_state ta_state = ma_open(ta);
if (t < TYPE_date) {
char buf[dblStrlen], *addr = buf; /* use memory
from stack */
sz = dblStrlen;
- res = (*tostr) (ma, &addr, &sz, p, true);
+ res = (*tostr) (ta, &addr, &sz, p, true);
if (res > 0)
res = mnstr_write(s, buf, (size_t) res, 1);
} else {
str buf = NULL;
sz = 0;
- res = (*tostr) (ma, &buf, &sz, p, true);
+ res = (*tostr) (ta, &buf, &sz, p, true);
if (res > 0)
res = mnstr_write(s, buf, (size_t) res, 1);
- // GDKfree(buf);
}
+ ma_close(ta, &ta_state);
} else {
res = mnstr_write(s, "nil", 1, 3);
}
diff --git a/gdk/gdk_atoms.h b/gdk/gdk_atoms.h
--- a/gdk/gdk_atoms.h
+++ b/gdk/gdk_atoms.h
@@ -74,7 +74,7 @@ gdk_export const char *ATOMname(int id);
gdk_export size_t ATOMlen(int id, const void *v);
gdk_export void *ATOMnil(int id)
__attribute__((__malloc__));
-gdk_export int ATOMprint(allocator *ma, int id, const void *val, stream *fd);
+gdk_export int ATOMprint(int id, const void *val, stream *fd);
gdk_export char *ATOMformat(allocator *ma, int id, const void *val)
__attribute__((__warn_unused_result__));
diff --git a/gdk/gdk_calc_convert.c b/gdk/gdk_calc_convert.c
--- a/gdk/gdk_calc_convert.c
+++ b/gdk/gdk_calc_convert.c
@@ -661,7 +661,7 @@ convertimpl_msk(flt)
convertimpl_msk(dbl)
static BUN
-convert_any_str(allocator *ma, BATiter *bi, BAT *bn, struct canditer *restrict
ci)
+convert_any_str(BATiter *bi, BAT *bn, struct canditer *restrict ci)
{
int tp = bi->type;
oid candoff = bi->b->hseqbase;
@@ -674,6 +674,8 @@ convert_any_str(allocator *ma, BATiter *
ssize_t (*atomtostr)(allocator *ma, str *, size_t *, const void *,
bool) = BATatoms[tp].atomToStr;
bool (*atomeq)(const void *, const void *) = ATOMequal(tp);
oid x;
+ allocator *ta = MT_thread_getallocator();
+ allocator_state ta_state = ma_open(ta);
QryCtx *qry_ctx = MT_thread_get_qry_ctx();
@@ -700,7 +702,7 @@ convert_any_str(allocator *ma, BATiter *
goto bailout;
}
} else {
- if ((*atomtostr)(ma, &dst, &len, src, false) <
0 ||
+ if ((*atomtostr)(ta, &dst, &len, src, false) <
0 ||
tfastins_nocheckVAR(bn, i, dst) !=
GDK_SUCCEED) {
goto bailout;
}
@@ -723,24 +725,24 @@ convert_any_str(allocator *ma, BATiter *
if (tfastins_nocheckVAR(bn, i, str_nil) !=
GDK_SUCCEED)
goto bailout;
} else {
- if ((*atomtostr)(ma, &dst, &len, src, false) <
0)
+ if ((*atomtostr)(ta, &dst, &len, src, false) <
0)
goto bailout;
if (tfastins_nocheckVAR(bn, i, dst) !=
GDK_SUCCEED)
goto bailout;
}
}
}
- // GDKfree(dst);
+ ma_close(ta, &ta_state);
TIMEOUT_CHECK(qry_ctx, TIMEOUT_HANDLER(BUN_NONE, qry_ctx));
BATsetcount(bn, ci->ncand);
return nils;
bailout:
- // GDKfree(dst);
+ ma_close(ta, &ta_state);
return BUN_NONE + 2;
}
static BUN
-convert_str_var(allocator *ma, BATiter *bi, BAT *bn, struct canditer *restrict
ci)
+convert_str_var(BATiter *bi, BAT *bn, struct canditer *restrict ci)
{
int tp = bn->ttype;
oid candoff = bi->b->hseqbase;
@@ -752,6 +754,8 @@ convert_str_var(allocator *ma, BATiter *
const char *restrict src;
ssize_t (*atomfromstr)(allocator *ma, const char *, size_t *, ptr *,
bool) = BATatoms[tp].atomFromStr;
oid x;
+ allocator *ta = MT_thread_getallocator();
+ allocator_state ta_state = ma_open(ta);
QryCtx *qry_ctx = MT_thread_get_qry_ctx();
@@ -765,24 +769,24 @@ convert_str_var(allocator *ma, BATiter *
}
} else {
ssize_t l;
- if ((l = (*atomfromstr)(ma, src, &len, &dst, false)) <
0 ||
+ if ((l = (*atomfromstr)(ta, src, &len, &dst, false)) <
0 ||
l < (ssize_t) strlen(src) ||
tfastins_nocheckVAR(bn, i, dst) != GDK_SUCCEED) {
goto bailout;
}
}
}
- // GDKfree(dst);
+ ma_close(ta, &ta_state);
TIMEOUT_CHECK(qry_ctx, TIMEOUT_HANDLER(BUN_NONE, qry_ctx));
BATsetcount(bn, ci->ncand);
return nils;
bailout:
- // GDKfree(dst);
+ ma_close(ta, &ta_state);
return BUN_NONE + 2;
}
static BUN
-convert_str_fix(allocator *ma, BATiter *bi, int tp, void *restrict dst,
+convert_str_fix(BATiter *bi, int tp, void *restrict dst,
struct canditer *restrict ci, oid candoff)
{
BUN nils = 0;
@@ -822,6 +826,8 @@ convert_str_fix(allocator *ma, BATiter *
}
bool (*atomeq)(const void *, const void *) = ATOMequal(tp);
+ allocator *ta = MT_thread_getallocator();
+ allocator_state ta_state = ma_open(ta);
TIMEOUT_LOOP(ci->ncand, qry_ctx) {
oid x = canditer_next(ci) - candoff;
const char *s = BUNtvar(*bi, x);
@@ -830,7 +836,7 @@ convert_str_fix(allocator *ma, BATiter *
nils++;
} else {
void *d = dst;
- if ((l = (*atomfromstr)(ma, s, &len, &d, false)) < 0 ||
+ if ((l = (*atomfromstr)(ta, s, &len, &d, false)) < 0 ||
l < (ssize_t) strlen(s)) {
goto conversion_failed;
}
@@ -840,6 +846,7 @@ convert_str_fix(allocator *ma, BATiter *
}
dst = (void *) ((char *) dst + len);
}
+ ma_close(ta, &ta_state);
TIMEOUT_CHECK(qry_ctx, TIMEOUT_HANDLER(BUN_NONE, qry_ctx));
return nils;
@@ -867,7 +874,7 @@ convert_str_fix(allocator *ma, BATiter *
}
static BUN
-convert_void_any(allocator *ma, oid seq, BAT *bn,
+convert_void_any(oid seq, BAT *bn,
struct canditer *restrict ci,
oid candoff, bool *reduce)
{
@@ -876,8 +883,6 @@ convert_void_any(allocator *ma, oid seq,
int tp = bn->ttype;
void *restrict dst = Tloc(bn, 0);
ssize_t (*atomtostr)(allocator *ma, str *, size_t *, const void *,
bool) = BATatoms[TYPE_oid].atomToStr;
- char *s = NULL;
- size_t len = 0;
oid x;
QryCtx *qry_ctx = MT_thread_get_qry_ctx();
@@ -953,17 +958,22 @@ convert_void_any(allocator *ma, oid seq,
((dbl *) dst)[i] = (dbl) (seq + x);
}
break;
- case TYPE_str:
+ case TYPE_str: {
+ allocator *ta = MT_thread_getallocator();
+ allocator_state ta_state = ma_open(ta);
+ char *s = NULL;
+ size_t len = 0;
TIMEOUT_LOOP_IDX(i, ci->ncand, qry_ctx) {
x = canditer_next(ci) - candoff;
- if ((*atomtostr)(ma, &s, &len, &(oid){seq + x}, false)
< 0)
- goto bailout;
- if (tfastins_nocheckVAR(bn, i, s) != GDK_SUCCEED)
+ if ((*atomtostr)(ta, &s, &len, &(oid){seq + x}, false)
< 0 ||
+ tfastins_nocheckVAR(bn, i, s) != GDK_SUCCEED) {
+ ma_close(ta, &ta_state);
goto bailout;
+ }
}
- GDKfree(s);
- s = NULL;
+ ma_close(ta, &ta_state);
break;
+ }
default:
return BUN_NONE + 1;
}
@@ -973,12 +983,11 @@ convert_void_any(allocator *ma, oid seq,
return nils;
bailout:
- GDKfree(s);
return BUN_NONE + 2;
}
static BUN
-convert_inet6_inet4(allocator *ma, const inet6 *src, inet4 *restrict dst,
+convert_inet6_inet4(const inet6 *src, inet4 *restrict dst,
struct canditer *restrict ci,
oid candoff)
{
@@ -1015,11 +1024,14 @@ convert_inet6_inet4(allocator *ma, const
.quad[3] = src[x].hex[15],
};
} else {
+ allocator *ta = MT_thread_getallocator();
+ allocator_state ta_state = ma_open(ta);
char buf[40], *s = buf;
size_t l = sizeof(buf);
- BATatoms[TYPE_inet6].atomToStr(ma, &s, &l,
&src[x], false);
+ BATatoms[TYPE_inet6].atomToStr(ta, &s, &l,
&src[x], false);
assert(buf == s);
GDKerror("22003!overflow in conversion of %s to
inet4.\n", buf);
+ ma_close(ta, &ta_state);
return BUN_NONE;
}
}
@@ -1053,11 +1065,14 @@ convert_inet6_inet4(allocator *ma, const
.quad[3] = src[x].hex[15],
};
} else {
+ allocator *ta = MT_thread_getallocator();
+ allocator_state ta_state = ma_open(ta);
char buf[40], *s = buf;
size_t l = sizeof(buf);
- BATatoms[TYPE_inet6].atomToStr(ma, &s, &l,
&src[x], false);
+ BATatoms[TYPE_inet6].atomToStr(ta, &s, &l,
&src[x], false);
assert(buf == s);
GDKerror("22003!overflow in conversion of %s to
inet4.\n", buf);
+ ma_close(ta, &ta_state);
return BUN_NONE;
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]