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]

Reply via email to