Changeset: e5b727f833e7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/e5b727f833e7
Modified Files:
        monetdb5/modules/atoms/str.c
Branch: Dec2025
Log Message:

Use thread-local allocator in str module.


diffs (213 lines):

diff --git a/monetdb5/modules/atoms/str.c b/monetdb5/modules/atoms/str.c
--- a/monetdb5/modules/atoms/str.c
+++ b/monetdb5/modules/atoms/str.c
@@ -2145,7 +2145,7 @@ do_strrev(char *dst, const char *src, si
 }
 
 static BAT *
-strbat_reverse(allocator *ma, BAT *b)
+strbat_reverse(BAT *b)
 {
        BAT *bn = NULL;
        BATiter bi;
@@ -2154,9 +2154,11 @@ strbat_reverse(allocator *ma, BAT *b)
        size_t len;
        char *dst;
        size_t dstlen;
+       allocator *ta = MT_thread_getallocator();
+       allocator_state ta_state = ma_open(ta);
 
        dstlen = 1024;
-       dst = ma_alloc(ma, dstlen);
+       dst = ma_alloc(ta, dstlen);
        if (dst == NULL)
                return NULL;
 
@@ -2176,11 +2178,11 @@ strbat_reverse(allocator *ma, BAT *b)
                        char *ndst;
                        size_t osz = dstlen;
                        dstlen = len + 1024;
-                       ndst = ma_realloc(ma, dst, dstlen, osz);
+                       ndst = ma_realloc(ta, dst, dstlen, osz);
                        if (ndst == NULL) {
                                bat_iterator_end(&bi);
                                BBPreclaim(bn);
-                               //GDKfree(dst);
+                               ma_close(ta, &ta_state);
                                return NULL;
                        }
                        dst = ndst;
@@ -2189,13 +2191,13 @@ strbat_reverse(allocator *ma, BAT *b)
                if (BUNappend(bn, dst, false) != GDK_SUCCEED) {
                        bat_iterator_end(&bi);
                        BBPreclaim(bn);
-                       //GDKfree(dst);
+                       ma_close(ta, &ta_state);
                        return NULL;
                }
        }
 
        bat_iterator_end(&bi);
-       //GDKfree(dst);
+       ma_close(ta, &ta_state);
        return bn;
 }
 
@@ -2273,19 +2275,6 @@ nested_loop_strjoin(BAT *rl, BAT *rr, BA
        return MAL_SUCCEED;
 }
 
-static void
-ng_destroy(NGrams *ng)
-{
-       if (ng) {
-               //GDKfree(ng->idx);
-               //GDKfree(ng->sigs);
-               //GDKfree(ng->histogram);
-               //GDKfree(ng->lists);
-               //GDKfree(ng->rids);
-       }
-       //GDKfree(ng);
-}
-
 static NGrams *
 ng_create(allocator *ma, size_t cnt, size_t ng_sz)
 {
@@ -2298,7 +2287,6 @@ ng_create(allocator *ma, size_t cnt, siz
                ng->rids = ma_alloc(ma, NG_MULTIPLE * cnt * sizeof(oid));
        }
        if (!ng || !ng->idx || !ng->sigs || !ng->histogram || !ng->lists || 
!ng->rids) {
-               ng_destroy(ng);
                return NULL;
        }
        return ng;
@@ -2391,16 +2379,20 @@ init_bigram_idx(NGrams *ng, BATiter *bi,
 }
 
 static str
-bigram_strjoin(allocator *ma, BAT *rl, BAT *rr, BATiter *li, BATiter *ri,
+bigram_strjoin(BAT *rl, BAT *rr, BATiter *li, BATiter *ri,
                           struct canditer *lci, struct canditer *rci,
                           int (*str_cmp)(const char *, const char *, size_t),
                           const char *fname, QryCtx *qry_ctx)
 {
        str msg = MAL_SUCCEED;
+       allocator *ta = MT_thread_getallocator();
+       allocator_state ta_state = ma_open(ta);
 
-       NGrams *ng = ng_create(ma, lci->ncand, BIGRAM_SZ);
-       if (!ng)
+       NGrams *ng = ng_create(ta, lci->ncand, BIGRAM_SZ);
+       if (!ng) {
+               ma_close(ta, &ta_state);
                throw(MAL, fname, SQLSTATE(HY013) MAL_MALLOC_FAIL);
+       }
 
        NG_TYPE *idx = ng->idx;
        NG_TYPE *sigs = ng->sigs;
@@ -2411,7 +2403,7 @@ bigram_strjoin(allocator *ma, BAT *rl, B
 
        msg = init_bigram_idx(ng, li, lci, qry_ctx);
        if (msg) {
-               ng_destroy(ng);
+               ma_close(ta, &ta_state);
                return msg;
        }
 
@@ -2440,7 +2432,7 @@ bigram_strjoin(allocator *ma, BAT *rl, B
                                                new_cap = BATgrows(rl);
                                                if (BATextend(rl, new_cap) != 
GDK_SUCCEED ||
                                                        (rr && BATextend(rr, 
new_cap) != GDK_SUCCEED)) {
-                                                       ng_destroy(ng);
+                                                       ma_close(ta, &ta_state);
                                                        throw(MAL, fname, 
GDK_EXCEPTION);
                                                }
                                        }
@@ -2470,7 +2462,7 @@ bigram_strjoin(allocator *ma, BAT *rl, B
                                                                new_cap = 
BATgrows(rl);
                                                                if 
(BATextend(rl, new_cap) != GDK_SUCCEED ||
                                                                        (rr && 
BATextend(rr, new_cap) != GDK_SUCCEED)) {
-                                                                       
ng_destroy(ng);
+                                                                       
ma_close(ta, &ta_state);
                                                                        
throw(MAL, fname, GDK_EXCEPTION);
                                                                }
                                                        }
@@ -2490,7 +2482,7 @@ bigram_strjoin(allocator *ma, BAT *rl, B
                                                                new_cap = 
BATgrows(rl);
                                                                if 
(BATextend(rl, new_cap) != GDK_SUCCEED ||
                                                                        (rr && 
BATextend(rr, new_cap) != GDK_SUCCEED)) {
-                                                                       
ng_destroy(ng);
+                                                                       
ma_close(ta, &ta_state);
                                                                        
throw(MAL, fname, GDK_EXCEPTION);
                                                                }
                                                        }
@@ -2502,14 +2494,16 @@ bigram_strjoin(allocator *ma, BAT *rl, B
        }
 
        BATsetcount(rl, BATcount(rl));
-       if (rr) BATsetcount(rr, BATcount(rr));
+       if (rr)
+               BATsetcount(rr, BATcount(rr));
 
        if (BATcount(rl) > 0) {
                BATnegateprops(rl);
-               if (rr) BATnegateprops(rr);
+               if (rr)
+                       BATnegateprops(rr);
        }
 
-       ng_destroy(ng);
+       ma_close(ta, &ta_state);
 
        TRC_DEBUG(ALGO, "(%s, %s, l=%s #%zu [%s], r=%s #%zu [%s], cl=%s #%zu, 
cr=%s #%zu, time="LLFMT"usecs)\n",
                          fname, "bigram_strjoin",
@@ -2710,7 +2704,7 @@ ignorecase(const bat IC, bool *icase, co
 }
 
 static str
-STRjoin(allocator *ma, MalStkPtr stk, InstrPtr pci, const str fname,
+STRjoin(MalStkPtr stk, InstrPtr pci, const str fname,
                int (*str_cmp)(const char *, const char *, size_t))
 {
        str msg = MAL_SUCCEED;
@@ -2791,11 +2785,11 @@ STRjoin(allocator *ma, MalStkPtr stk, In
                        ri = bat_iterator(r);
                }
                if (str_cmp == str_contains || str_cmp == str_icontains) {
-                       msg = bigram_strjoin(ma, rl, rr, &li, &ri, &lci, &rci, 
str_cmp, fname, qry_ctx);
+                       msg = bigram_strjoin(rl, rr, &li, &ri, &lci, &rci, 
str_cmp, fname, qry_ctx);
                } else {
                        if (str_cmp == str_is_suffix || str_cmp == 
str_is_isuffix) {
                                BAT *l_rev = NULL, *r_rev = NULL;
-                               if (!(l_rev = strbat_reverse(ma, l)) || !(r_rev 
= strbat_reverse(ma, r))) {
+                               if (!(l_rev = strbat_reverse(l)) || !(r_rev = 
strbat_reverse(r))) {
                                        bat_iterator_end(&li);
                                        bat_iterator_end(&ri);
                                        BBPreclaim_n(7, rl, rr, l, r, cl, cr, 
l_rev);
@@ -2836,7 +2830,7 @@ STRstartswithjoin(Client ctx, MalBlkPtr 
 {
        (void)ctx;
        (void)mb;
-       return STRjoin(mb->ma, stk, pci, "str.startswithjoin", str_is_prefix);
+       return STRjoin(stk, pci, "str.startswithjoin", str_is_prefix);
 }
 
 static str
@@ -2844,7 +2838,7 @@ STRendswithjoin(Client ctx, MalBlkPtr mb
 {
        (void)ctx;
        (void)mb;
-       return STRjoin(mb->ma, stk, pci, "str.endswithjoin", str_is_suffix);
+       return STRjoin(stk, pci, "str.endswithjoin", str_is_suffix);
 }
 
 static str
@@ -2852,7 +2846,7 @@ STRcontainsjoin(Client ctx, MalBlkPtr mb
 {
        (void)ctx;
        (void)mb;
-       return STRjoin(mb->ma, stk, pci, "str.containsjoin", str_contains);
+       return STRjoin(stk, pci, "str.containsjoin", str_contains);
 }
 
 #include "mel.h"
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to