Changeset: cd92543752c4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/cd92543752c4
Modified Files:
clients/Tests/exports.stable.out
gdk/gdk.h
gdk/gdk_calc_addsub.c
gdk/gdk_calc_convert.c
gdk/gdk_firstn.c
gdk/gdk_group.c
gdk/gdk_logger.c
gdk/gdk_orderidx.c
gdk/gdk_project.c
gdk/gdk_rtree.c
gdk/gdk_sample.c
gdk/gdk_ssort.c
gdk/gdk_ssort_impl.h
gdk/gdk_string.c
gdk/gdk_subquery.c
geom/monetdb5/geod.c
geom/monetdb5/geomBulk.c
monetdb5/mal/mal_authorize.c
monetdb5/modules/atoms/str.c
Branch: Dec2025
Log Message:
Convert a bunch of GDKmalloc calls to using an allocator.
diffs (truncated from 1337 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
@@ -273,9 +273,9 @@ BAT *GDKanalyticalntile(BAT *b, BAT *p,
BAT *GDKanalyticalprod(BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int tp1, int
tp2, int frame_type) __attribute__((__warn_unused_result__));
BAT *GDKanalyticalsum(BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int tp1, int
tp2, int frame_type) __attribute__((__warn_unused_result__));
BAT *GDKanalyticalwindowbounds(BAT *b, BAT *p, BAT *l, const void *restrict
bound, int tp1, int tp2, int unit, bool preceding, oid first_half)
__attribute__((__warn_unused_result__));
-gdk_return GDKasciify(char **restrict buf, size_t *restrict buflen, const char
*restrict s);
+gdk_return GDKasciify(allocator *ma, char **restrict buf, size_t *restrict
buflen, const char *restrict s);
int GDKatomcnt;
-gdk_return GDKcasefold(char **restrict buf, size_t *restrict buflen, const
char *restrict s) __attribute__((__access__(read_write, 1)))
__attribute__((__access__(read_write, 2)));
+gdk_return GDKcasefold(allocator *ma, char **restrict buf, size_t *restrict
buflen, const char *restrict s) __attribute__((__access__(read_write, 2)))
__attribute__((__access__(read_write, 3)));
void GDKclrerr(void);
gdk_return GDKcopyenv(BAT **key, BAT **val, bool writable);
gdk_return GDKcreatedir(const char *nme);
@@ -330,8 +330,8 @@ char *GDKstrcasestr(const char *haystack
str GDKstrdup(const char *s) __attribute__((__malloc__))
__attribute__((__malloc__(GDKfree, 1))) __attribute__((__warn_unused_result__));
int GDKstrncasecmp(const char *str1, const char *str2, size_t l1, size_t l2);
str GDKstrndup(const char *s, size_t n) __attribute__((__malloc__))
__attribute__((__malloc__(GDKfree, 1))) __attribute__((__warn_unused_result__));
-gdk_return GDKtolower(char **restrict buf, size_t *restrict buflen, const char
*restrict s) __attribute__((__access__(read_write, 1)))
__attribute__((__access__(read_write, 2)));
-gdk_return GDKtoupper(char **restrict buf, size_t *restrict buflen, const char
*restrict s) __attribute__((__access__(read_write, 1)))
__attribute__((__access__(read_write, 2)));
+gdk_return GDKtolower(allocator *ma, char **restrict buf, size_t *restrict
buflen, const char *restrict s) __attribute__((__access__(read_write, 2)))
__attribute__((__access__(read_write, 3)));
+gdk_return GDKtoupper(allocator *ma, char **restrict buf, size_t *restrict
buflen, const char *restrict s) __attribute__((__access__(read_write, 2)))
__attribute__((__access__(read_write, 3)));
gdk_return GDKtracer_fill_comp_info(BAT *id, BAT *component, BAT *log_level);
gdk_return GDKtracer_flush_buffer(void);
const char *GDKtracer_get_component_level(const char *comp);
@@ -409,7 +409,7 @@ void RTREEdestroy(BAT *b);
bool RTREEexists(BAT *b);
bool RTREEexists_bid(bat bid);
void RTREEfree(BAT *b);
-BUN *RTREEsearch(BAT *b, const void *inMBR, int result_limit);
+BUN *RTREEsearch(allocator *ma, BAT *b, const void *inMBR, int result_limit);
BUN SORTfnd(BAT *b, const void *v);
BUN SORTfndfirst(BAT *b, const void *v);
BUN SORTfndlast(BAT *b, const void *v);
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1235,7 +1235,7 @@ gdk_export bool RTREEexists_bid(bat bid)
gdk_export gdk_return BATrtree(BAT *wkb, BAT* mbr);
/* inMBR is really a struct mbr * from geom module, but that is not
* available here */
-gdk_export BUN* RTREEsearch(BAT *b, const void *inMBR, int result_limit);
+gdk_export BUN* RTREEsearch(allocator *ma, BAT *b, const void *inMBR, int
result_limit);
#endif
gdk_export void RTREEdestroy(BAT *b);
@@ -1532,22 +1532,22 @@ gdk_export BAT *BATgroupedfirstn(BUN n,
__attribute__((__warn_unused_result__));
-gdk_export gdk_return GDKtoupper(char **restrict buf, size_t *restrict buflen,
const char *restrict s)
- __attribute__((__access__(read_write, 1)))
- __attribute__((__access__(read_write, 2)));
-gdk_export gdk_return GDKtolower(char **restrict buf, size_t *restrict buflen,
const char *restrict s)
- __attribute__((__access__(read_write, 1)))
- __attribute__((__access__(read_write, 2)));
-gdk_export gdk_return GDKcasefold(char **restrict buf, size_t *restrict
buflen, const char *restrict s)
- __attribute__((__access__(read_write, 1)))
- __attribute__((__access__(read_write, 2)));
+gdk_export gdk_return GDKtoupper(allocator *ma, char **restrict buf, size_t
*restrict buflen, const char *restrict s)
+ __attribute__((__access__(read_write, 2)))
+ __attribute__((__access__(read_write, 3)));
+gdk_export gdk_return GDKtolower(allocator *ma, char **restrict buf, size_t
*restrict buflen, const char *restrict s)
+ __attribute__((__access__(read_write, 2)))
+ __attribute__((__access__(read_write, 3)));
+gdk_export gdk_return GDKcasefold(allocator *ma, char **restrict buf, size_t
*restrict buflen, const char *restrict s)
+ __attribute__((__access__(read_write, 2)))
+ __attribute__((__access__(read_write, 3)));
gdk_export int GDKstrncasecmp(const char *str1, const char *str2, size_t l1,
size_t l2);
gdk_export int GDKstrcasecmp(const char *s1, const char *s2);
gdk_export char *GDKstrcasestr(const char *haystack, const char *needle);
gdk_export BAT *BATtoupper(BAT *b, BAT *s);
gdk_export BAT *BATtolower(BAT *b, BAT *s);
gdk_export BAT *BATcasefold(BAT *b, BAT *s);
-gdk_export gdk_return GDKasciify(char **restrict buf, size_t *restrict buflen,
const char *restrict s);
+gdk_export gdk_return GDKasciify(allocator *ma, char **restrict buf, size_t
*restrict buflen, const char *restrict s);
gdk_export BAT *BATasciify(BAT *b, BAT *s);
#ifdef HAVE_OPENSSL
gdk_export gdk_return BATaggrdigest(allocator *ma, BAT **bnp, char **shap,
const char *digest, BAT *b, BAT *g, BAT *e, BAT *s, bool skip_nils);
diff --git a/gdk/gdk_calc_addsub.c b/gdk/gdk_calc_addsub.c
--- a/gdk/gdk_calc_addsub.c
+++ b/gdk/gdk_calc_addsub.c
@@ -1436,9 +1436,13 @@ addstr_loop(BAT *b1, const char *l, BAT
candoff1 = b1 ? b1->hseqbase : 0;
candoff2 = b2 ? b2->hseqbase : 0;
slen = 1024;
- s = GDKmalloc(slen);
- if (s == NULL)
+ allocator *ta = MT_thread_getallocator();
+ allocator_state ta_state = ma_open(ta);
+ s = ma_alloc(ta, slen);
+ if (s == NULL) {
+ ma_close(ta, &ta_state);
return BUN_NONE;
+ }
TIMEOUT_LOOP_IDX_DECL(i, ncand, qry_ctx) {
oid x1 = canditer_next(ci1) - candoff1;
oid x2 = canditer_next(ci2) - candoff2;
@@ -1454,9 +1458,10 @@ addstr_loop(BAT *b1, const char *l, BAT
llen = strlen(l);
rlen = strlen(r);
if (llen + rlen >= slen) {
+ /* ma_close(ta, &ta_state); */
+ /* ta_state = ma_open(ta); */
slen = llen + rlen + 1024;
- GDKfree(s);
- s = GDKmalloc(slen);
+ s = ma_alloc(ta, slen);
if (s == NULL)
goto bailout;
}
@@ -1467,12 +1472,12 @@ addstr_loop(BAT *b1, const char *l, BAT
}
TIMEOUT_CHECK(qry_ctx,
GOTO_LABEL_TIMEOUT_HANDLER(bailout, qry_ctx));
- GDKfree(s);
+ ma_close(ta, &ta_state);
bn->theap->dirty = true;
return nils;
bailout:
- GDKfree(s);
+ ma_close(ta, &ta_state);
return BUN_NONE;
}
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
@@ -797,6 +797,8 @@ convert_str_fix(BATiter *bi, int tp, voi
const char *s = NULL;
QryCtx *qry_ctx = MT_thread_get_qry_ctx();
+ allocator *ta = MT_thread_getallocator();
+ allocator_state ta_state = ma_open(ta);
if (ATOMstorage(tp) == TYPE_msk) {
uint32_t mask = 0;
@@ -822,12 +824,11 @@ convert_str_fix(BATiter *bi, int tp, voi
TIMEOUT_CHECK(qry_ctx, TIMEOUT_HANDLER(BUN_NONE, qry_ctx));
if (j > 0)
*d = mask;
+ ma_close(ta, &ta_state);
return 0;
}
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);
@@ -857,19 +858,19 @@ convert_str_fix(BATiter *bi, int tp, voi
if (s) {
sz = escapedStrlen(s, NULL, NULL, '\'');
- bf = GDKmalloc(sz + 1);
+ bf = ma_alloc(ta, sz + 1);
}
if (bf) {
escapedStr(bf, s, sz + 1, NULL, NULL, '\'');
GDKerror("22018!conversion of string "
"'%s' to type %s failed.\n",
bf, ATOMname(tp));
- GDKfree(bf);
} else {
GDKerror("22018!conversion of string "
"to type %s failed.\n",
ATOMname(tp));
}
+ ma_close(ta, &ta_state);
return BUN_NONE;
}
@@ -1797,19 +1798,21 @@ VARconvert(allocator *ma, ValPtr ret, co
//if (ATOMextern(ret->vtype))
// GDKfree(p);
GDKclrerr();
+ allocator *ta = MT_thread_getallocator();
+ allocator_state ta_state = ma_open(ta);
size_t sz = escapedStrlen(v->val.sval, NULL,
NULL, '\'');
- char *bf = GDKmalloc(sz + 1);
+ char *bf = ma_alloc(ta, sz + 1);
if (bf) {
escapedStr(bf, v->val.sval, sz + 1,
NULL, NULL, '\'');
GDKerror("22018!conversion of string "
"'%s' to type %s failed.\n",
bf, ATOMname(ret->vtype));
- GDKfree(bf);
} else {
GDKerror("22018!conversion of string "
"to type %s failed.\n",
ATOMname(ret->vtype));
}
+ ma_close(ta, &ta_state);
return GDK_FAIL;
} else {
/* now give value obtained to ret */
diff --git a/gdk/gdk_firstn.c b/gdk/gdk_firstn.c
--- a/gdk/gdk_firstn.c
+++ b/gdk/gdk_firstn.c
@@ -775,9 +775,12 @@ BATfirstn_unique_with_groups(BATiter *bi
BATsetcount(bn, n);
oids = (oid *) Tloc(bn, 0);
gv = (const oid *) Tloc(g, 0);
- goids = GDKmalloc(n * sizeof(oid));
+ allocator *ta = MT_thread_getallocator();
+ allocator_state ta_state = ma_open(ta);
+ goids = ma_alloc(ta, n * sizeof(oid));
if (goids == NULL) {
BBPreclaim(bn);
+ ma_close(ta, &ta_state);
return NULL;
}
@@ -1000,7 +1003,7 @@ BATfirstn_unique_with_groups(BATiter *bi
*lastp = oids[0];
if (lastgp)
*lastgp = goids[0];
- GDKfree(goids);
+ ma_close(ta, &ta_state);
/* output must be sorted since it's a candidate list */
GDKqsort(oids, NULL, NULL, (size_t) n, sizeof(oid), 0, TYPE_oid, false,
false);
bn->tsorted = true;
@@ -1017,7 +1020,7 @@ BATfirstn_unique_with_groups(BATiter *bi
return bn;
bailout:
- GDKfree(goids);
+ ma_close(ta, &ta_state);
BBPreclaim(bn);
return NULL;
}
@@ -1382,13 +1385,17 @@ BATgroupedfirstn(BUN n, BAT *s, BAT *g,
return NULL;
}
- batinfo = GDKmalloc(nbats * sizeof(struct batinfo));
- if (batinfo == NULL)
+ allocator *ta = MT_thread_getallocator();
+ allocator_state ta_state = ma_open(ta);
+ batinfo = ma_alloc(ta, nbats * sizeof(struct batinfo));
+ if (batinfo == NULL) {
+ ma_close(ta, &ta_state);
return NULL;
+ }
BAT *bn = BATconstant(0, TYPE_oid, &oid_nil, ngrp * n, TRANSIENT);
if (bn == NULL) {
- GDKfree(batinfo);
+ ma_close(ta, &ta_state);
return NULL;
}
/* result is unlikely to be sorted, and there may be nils if
@@ -1522,7 +1529,7 @@ BATgroupedfirstn(BUN n, BAT *s, BAT *g,
bat_iterator_end(&batinfo[i].bi1);
bat_iterator_end(&batinfo[i].bi2);
}
- GDKfree(batinfo);
+ ma_close(ta, &ta_state);
TIMEOUT_CHECK(qry_ctx, GOTO_LABEL_TIMEOUT_HANDLER(bailout, qry_ctx));
return bn;
diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c
--- a/gdk/gdk_group.c
+++ b/gdk/gdk_group.c
@@ -690,6 +690,9 @@ BATgroup_internal(BAT **groups, BAT **ex
canditer_init(&ci, b, s);
bi = bat_iterator(b);
+ allocator *ta = MT_thread_getallocator();
+ allocator_state ta_state = ma_open(ta);
+
/* g is NULL or [oid(dense),oid] and same size as b or s */
assert(g == NULL || BATttype(g) == TYPE_oid || BATcount(g) == 0);
assert(g == NULL || BATcount(g) == ci.ncand);
@@ -1000,7 +1003,7 @@ BATgroup_internal(BAT **groups, BAT **ex
j = (BUN) m + 1;
}
/* array to maintain last time we saw each old group */
- pgrp = GDKmalloc(sizeof(BUN) * j);
+ pgrp = ma_alloc(ta, sizeof(BUN) * j);
if (pgrp == NULL)
goto error;
/* initialize to impossible position */
@@ -1037,7 +1040,7 @@ BATgroup_internal(BAT **groups, BAT **ex
break;
}
- GDKfree(pgrp);
+ ma_close(ta, &ta_state);
} else if (g == NULL &&
(BATcheckhash(b) ||
((!bi.transient ||
@@ -1280,6 +1283,7 @@ BATgroup_internal(BAT **groups, BAT **ex
HEAPfree(&hs->heaplink, true);
GDKfree(hs);
}
+ ma_close(ta, &ta_state);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]