Changeset: 0aa78e5ad0b2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/0aa78e5ad0b2
Modified Files:
        clients/Tests/exports.stable.out
        gdk/gdk_aggr.c
        gdk/gdk_calc.h
        gdk/gdk_calc_convert.c
        gdk/gdk_string.c
        monetdb5/modules/atoms/blob.c
        monetdb5/modules/atoms/inet-46.c
        monetdb5/modules/kernel/aggr.c
        monetdb5/modules/mal/batcalc.c
        monetdb5/modules/mal/calc.c
        monetdb5/modules/mal/txtsim.c
        sql/backends/monet5/UDF/pyapi3/conversion.h
        sql/backends/monet5/UDF/pyapi3/conversion3.c
        sql/backends/monet5/sql_cast_impl_int.h
        sql/storage/bat/bat_logger.c
        sql/storage/bat/bat_storage.c
        sql/storage/store.c
Branch: resource_management
Log Message:

Use TLS allocator for local temp space; no need to pass allocator to many funcs.


diffs (truncated from 3185 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
@@ -113,7 +113,7 @@ bool BATcheckorderidx(BAT *b);
 gdk_return BATclear(BAT *b, bool force);
 void BATcommit(BAT *b, BUN size);
 BAT *BATconstant(oid hseq, int tt, const void *val, BUN cnt, role_t role);
-BAT *BATconvert(allocator *ma, BAT *b, BAT *s, int tp, uint8_t scale1, uint8_t 
scale2, uint8_t precision);
+BAT *BATconvert(BAT *b, BAT *s, int tp, uint8_t scale1, uint8_t scale2, 
uint8_t precision);
 BUN BATcount_no_nil(BAT *b, BAT *s);
 gdk_return BATdel(BAT *b, BAT *d) __attribute__((__warn_unused_result__));
 BAT *BATdense(oid hseq, oid tseq, BUN cnt) 
__attribute__((__warn_unused_result__));
@@ -127,27 +127,27 @@ ValPtr BATgetprop(BAT *b, enum prop_t id
 ValPtr BATgetprop_nolock(BAT *b, enum prop_t idx);
 gdk_return BATgroup(BAT **groups, BAT **extents, BAT **histo, BAT *b, BAT *s, 
BAT *g, BAT *e, BAT *h) __attribute__((__access__(write_only, 1))) 
__attribute__((__access__(write_only, 2))) 
__attribute__((__access__(write_only, 3))) 
__attribute__((__warn_unused_result__));
 const char *BATgroupaggrinit(BAT *b, BAT *g, BAT *e, BAT *s, oid *minp, oid 
*maxp, BUN *ngrpp, struct canditer *ci);
-gdk_return BATgroupavg(allocator *ma, BAT **bnp, BAT **cntsp, BAT *b, BAT *g, 
BAT *e, BAT *s, int tp, bool skip_nils, int scale);
-gdk_return BATgroupavg3(allocator *, BAT **avgp, BAT **remp, BAT **cntp, BAT 
*b, BAT *g, BAT *e, BAT *s, bool skip_nils);
-BAT *BATgroupavg3combine(allocator *, BAT *avg, BAT *rem, BAT *cnt, BAT *g, 
BAT *e, bool skip_nils);
+gdk_return BATgroupavg(BAT **bnp, BAT **cntsp, BAT *b, BAT *g, BAT *e, BAT *s, 
int tp, bool skip_nils, int scale);
+gdk_return BATgroupavg3(BAT **avgp, BAT **remp, BAT **cntp, BAT *b, BAT *g, 
BAT *e, BAT *s, bool skip_nils);
+BAT *BATgroupavg3combine(BAT *avg, BAT *rem, BAT *cnt, BAT *g, BAT *e, bool 
skip_nils);
 BAT *BATgroupcorrelation(BAT *b1, BAT *b2, BAT *g, BAT *e, BAT *s, int tp, 
bool skip_nils);
-BAT *BATgroupcount(allocator *ma, BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool 
skip_nils);
+BAT *BATgroupcount(BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool skip_nils);
 BAT *BATgroupcovariance_population(BAT *b1, BAT *b2, BAT *g, BAT *e, BAT *s, 
int tp, bool skip_nils);
 BAT *BATgroupcovariance_sample(BAT *b1, BAT *b2, BAT *g, BAT *e, BAT *s, int 
tp, bool skip_nils);
 BAT *BATgroupedfirstn(BUN n, BAT *s, BAT *g, int nbats, BAT **bats, bool *asc, 
bool *nilslast) __attribute__((__warn_unused_result__));
-BAT *BATgroupmax(allocator *ma, BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool 
skip_nils);
-BAT *BATgroupmedian(allocator *ma, BAT *b, BAT *g, BAT *e, BAT *s, int tp, 
bool skip_nils);
-BAT *BATgroupmedian_avg(allocator *ma, BAT *b, BAT *g, BAT *e, BAT *s, int tp, 
bool skip_nils);
-BAT *BATgroupmin(allocator *ma, BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool 
skip_nils);
-BAT *BATgroupprod(allocator *ma, BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool 
skip_nils);
-BAT *BATgroupquantile(allocator *ma, BAT *b, BAT *g, BAT *e, BAT *s, int tp, 
double quantile, bool skip_nils);
-BAT *BATgroupquantile_avg(allocator *ma, BAT *b, BAT *g, BAT *e, BAT *s, int 
tp, double quantile, bool skip_nils);
-BAT *BATgroupstdev_population(allocator *ma, BAT *b, BAT *g, BAT *e, BAT *s, 
int tp, bool skip_nils);
-BAT *BATgroupstdev_sample(allocator *ma, BAT *b, BAT *g, BAT *e, BAT *s, int 
tp, bool skip_nils);
-BAT *BATgroupstr_group_concat(allocator *alloc, BAT *b, BAT *g, BAT *e, BAT 
*s, BAT *sep, bool skip_nils, const char *restrict separator);
-BAT *BATgroupsum(allocator *ma, BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool 
skip_nils);
-BAT *BATgroupvariance_population(allocator *ma, BAT *b, BAT *g, BAT *e, BAT 
*s, int tp, bool skip_nils);
-BAT *BATgroupvariance_sample(allocator *ma, BAT *b, BAT *g, BAT *e, BAT *s, 
int tp, bool skip_nils);
+BAT *BATgroupmax(BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool skip_nils);
+BAT *BATgroupmedian(BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool skip_nils);
+BAT *BATgroupmedian_avg(BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool 
skip_nils);
+BAT *BATgroupmin(BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool skip_nils);
+BAT *BATgroupprod(BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool skip_nils);
+BAT *BATgroupquantile(BAT *b, BAT *g, BAT *e, BAT *s, int tp, double quantile, 
bool skip_nils);
+BAT *BATgroupquantile_avg(BAT *b, BAT *g, BAT *e, BAT *s, int tp, double 
quantile, bool skip_nils);
+BAT *BATgroupstdev_population(BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool 
skip_nils);
+BAT *BATgroupstdev_sample(BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool 
skip_nils);
+BAT *BATgroupstr_group_concat(BAT *b, BAT *g, BAT *e, BAT *s, BAT *sep, bool 
skip_nils, const char *restrict separator);
+BAT *BATgroupsum(BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool skip_nils);
+BAT *BATgroupvariance_population(BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool 
skip_nils);
+BAT *BATgroupvariance_sample(BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool 
skip_nils);
 BUN BATgrows(BAT *b);
 BUN BATguess_uniques(BAT *b, struct canditer *ci);
 gdk_return BAThash(BAT *b);
@@ -197,7 +197,7 @@ ValPtr BATsetprop_nolock(BAT *b, enum pr
 gdk_return BATsetstrimps(BAT *b);
 BAT *BATslice(BAT *b, BUN low, BUN high);
 gdk_return BATsort(BAT **sorted, BAT **order, BAT **groups, BAT *b, BAT *o, 
BAT *g, bool reverse, bool nilslast, bool stable) 
__attribute__((__access__(write_only, 1))) 
__attribute__((__access__(write_only, 2))) 
__attribute__((__access__(write_only, 3))) 
__attribute__((__warn_unused_result__));
-gdk_return BATstr_group_concat(allocator *alloc, ValPtr res, BAT *b, BAT *s, 
BAT *sep, bool skip_nils, bool nil_if_empty, const char *restrict separator);
+gdk_return BATstr_group_concat(allocator *ma, ValPtr res, BAT *b, BAT *s, BAT 
*sep, bool skip_nils, bool nil_if_empty, const char *restrict separator);
 gdk_return BATsubcross(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, 
bool max_one) __attribute__((__access__(write_only, 1))) 
__attribute__((__access__(write_only, 2))) 
__attribute__((__warn_unused_result__));
 BAT *BATsubexist(BAT *l, BAT *g, BAT *e, BAT *s);
 BAT *BATsubnot_exist(BAT *l, BAT *g, BAT *e, BAT *s);
@@ -1378,7 +1378,7 @@ int winerror(int);
 char *BatType_Format(int);
 int BatType_ToPyType(int);
 str ConvertFromSQLType(allocator *, Client ctx, BAT *b, sql_subtype 
*sql_subtype, BAT **ret_bat, int *ret_type);
-str ConvertToSQLType(allocator *, Client cntxt, BAT *b, sql_subtype 
*sql_subtype, BAT **ret_bat, int *ret_type);
+str ConvertToSQLType(Client cntxt, BAT *b, sql_subtype *sql_subtype, BAT 
**ret_bat, int *ret_type);
 bit ConvertableSQLType(sql_subtype *sql_subtype);
 str FITSattach(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str FITSdir(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -209,6 +209,9 @@ dofsum(const void *restrict values, oid 
 
        QryCtx *qry_ctx = MT_thread_get_qry_ctx();
 
+       allocator *ma = MT_thread_getallocator();
+       allocator_state ma_state = ma_open(ma);
+
        /* we only deal with the two floating point types */
        assert(tp1 == TYPE_flt || tp1 == TYPE_dbl);
        assert(tp2 == TYPE_flt || tp2 == TYPE_dbl);
@@ -221,18 +224,18 @@ dofsum(const void *restrict values, oid 
                ngrp = 1;
                gids = NULL;
        }
-       pergroup = GDKmalloc(ngrp * sizeof(*pergroup));
-       if (pergroup == NULL)
+       pergroup = ma_alloc(ma, ngrp * sizeof(*pergroup));
+       if (pergroup == NULL) {
+               ma_close(ma, &ma_state);
                return BUN_NONE;
+       }
        for (grp = 0; grp < ngrp; grp++) {
                pergroup[grp] = (struct pergroup) {
                        .maxpartials = 2,
-                       .partials = GDKmalloc(2 * sizeof(double)),
+                       .partials = ma_alloc(ma, 2 * sizeof(double)),
                };
                if (pergroup[grp].partials == NULL) {
-                       while (grp > 0)
-                               GDKfree(pergroup[--grp].partials);
-                       GDKfree(pergroup);
+                       ma_close(ma, &ma_state);
                        return BUN_NONE;
                }
        }
@@ -254,7 +257,6 @@ dofsum(const void *restrict values, oid 
                                        ((flt *) results)[grp] = flt_nil;
                                else
                                        ((dbl *) results)[grp] = dbl_nil;
-                               GDKfree(pergroup[grp].partials);
                                pergroup[grp].partials = NULL;
                                if (++nils == ngrp)
                                        TIMEOUT_LOOP_BREAK;
@@ -289,12 +291,10 @@ dofsum(const void *restrict values, oid 
                }
                if (x != 0) {
                        if (i == pergroup[grp].maxpartials) {
-                               double *temp;
-                               pergroup[grp].maxpartials += 
pergroup[grp].maxpartials;
-                               temp = GDKrealloc(pergroup[grp].partials, 
pergroup[grp].maxpartials * sizeof(double));
-                               if (temp == NULL)
+                               pergroup[grp].partials = ma_realloc(ma, 
pergroup[grp].partials, pergroup[grp].maxpartials * 2 * sizeof(double), 
pergroup[grp].maxpartials * sizeof(double));
+                               if (pergroup[grp].partials == NULL)
                                        goto bailout;
-                               pergroup[grp].partials = temp;
+                               pergroup[grp].maxpartials *= 2;
                        }
                        pergroup[grp].partials[i++] = x;
                }
@@ -310,7 +310,6 @@ dofsum(const void *restrict values, oid 
                        else
                                ((dbl *) results)[grp] = nil_if_empty ? dbl_nil 
: 0;
                        nils += nil_if_empty;
-                       GDKfree(pergroup[grp].partials);
                        pergroup[grp].partials = NULL;
                        continue;
                }
@@ -331,7 +330,6 @@ dofsum(const void *restrict values, oid 
                                if (x == y &&
                                    pergroup[grp].npartials > 1 &&
                                    samesign(lo, 
pergroup[grp].partials[pergroup[grp].npartials - 2])) {
-                                       GDKfree(pergroup[grp].partials);
                                        pergroup[grp].partials = NULL;
                                        x = 2 * (hi + y);
                                        if (tp2 == TYPE_flt) {
@@ -352,13 +350,11 @@ dofsum(const void *restrict values, oid 
                        } else {
                                if (lo) {
                                        if (pergroup[grp].npartials == 
pergroup[grp].maxpartials) {
-                                               double *temp;
                                                /* we need space for one more */
+                                               pergroup[grp].partials = 
ma_realloc(ma, pergroup[grp].partials, (pergroup[grp].maxpartials + 1) * 
sizeof(double), pergroup[grp].maxpartials * sizeof(double));
+                                               if (pergroup[grp].partials == 
NULL)
+                                                       goto bailout;
                                                pergroup[grp].maxpartials++;
-                                               temp = 
GDKrealloc(pergroup[grp].partials, pergroup[grp].maxpartials * sizeof(double));
-                                               if (temp == NULL)
-                                                       goto bailout;
-                                               pergroup[grp].partials = temp;
                                        }
                                        
pergroup[grp].partials[pergroup[grp].npartials - 1] = 2 * lo;
                                        
pergroup[grp].partials[pergroup[grp].npartials++] = 2 * hi;
@@ -373,7 +369,6 @@ dofsum(const void *restrict values, oid 
                        goto overflow;
 
                if (pergroup[grp].npartials == 0) {
-                       GDKfree(pergroup[grp].partials);
                        pergroup[grp].partials = NULL;
                        if (tp2 == TYPE_flt)
                                ((flt *) results)[grp] = 0;
@@ -399,7 +394,6 @@ dofsum(const void *restrict values, oid 
                        pergroup[grp].partials[pergroup[grp].npartials - 1] = 
-pergroup[grp].partials[pergroup[grp].npartials - 1];
                }
 
-               GDKfree(pergroup[grp].partials);
                pergroup[grp].partials = NULL;
                if (tp2 == TYPE_flt) {
                        f = (flt) hi;
@@ -414,15 +408,13 @@ dofsum(const void *restrict values, oid 
                        ((dbl *) results)[grp] = hi;
                }
        }
-       GDKfree(pergroup);
+       ma_close(ma, &ma_state);
        return nils;
 
   overflow:
        GDKerror("22003!overflow in sum aggregate.\n");
   bailout:
-       for (grp = 0; grp < ngrp; grp++)
-               GDKfree(pergroup[grp].partials);
-       GDKfree(pergroup);
+       ma_close(ma, &ma_state);
        return BUN_NONE;
 }
 
@@ -733,9 +725,13 @@ dosum(const void *restrict values, bool 
                              nil_if_empty);
        }
 
+       allocator *ma = MT_thread_getallocator();
+       allocator_state ma_state = ma_open(ma);
+
        /* allocate bitmap for seen group ids */
-       seen = GDKzalloc(((ngrp + 31) / 32) * sizeof(int));
+       seen = ma_zalloc(ma, ((ngrp + 31) / 32) * sizeof(int));
        if (seen == NULL) {
+               ma_close(ma, &ma_state);
                return BUN_NONE;
        }
 
@@ -875,29 +871,29 @@ dosum(const void *restrict values, bool 
                        }
                }
        }
-       GDKfree(seen);
+       ma_close(ma, &ma_state);
 
        return nils;
 
   unsupported:
-       GDKfree(seen);
        GDKerror("%s: type combination (sum(%s)->%s) not supported.\n",
                 func, ATOMname(tp1), ATOMname(tp2));
+       ma_close(ma, &ma_state);
        return BUN_NONE;
 
   overflow:
-       GDKfree(seen);
        GDKerror("22003!overflow in sum aggregate.\n");
+       ma_close(ma, &ma_state);
        return BUN_NONE;
 
   bailout:
-       GDKfree(seen);
+       ma_close(ma, &ma_state);
        return BUN_NONE;
 }
 
 /* calculate group sums with optional candidates list */
 BAT *
-BATgroupsum(allocator *ma, BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool 
skip_nils)
+BATgroupsum(BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool skip_nils)
 {
        const oid *restrict gids;
        oid min, max;
@@ -931,7 +927,7 @@ BATgroupsum(allocator *ma, BAT *b, BAT *
            (BATtdense(g) || (g->tkey && g->tnonil))) {
                /* trivial: singleton groups, so all results are equal
                 * to the inputs (but possibly a different type) */
-               return BATconvert(ma, b, s, tp, 0, 0, 0);
+               return BATconvert(b, s, tp, 0, 0, 0);
        }
 
        bn = BATconstant(min, tp, ATOMnilptr(tp), ngrp, TRANSIENT);
@@ -1358,9 +1354,13 @@ doprod(const void *restrict values, oid 
 
        QryCtx *qry_ctx = MT_thread_get_qry_ctx();
 
+       allocator *ma = MT_thread_getallocator();
+       allocator_state ma_state = ma_open(ma);
+
        /* allocate bitmap for seen group ids */
-       seen = GDKzalloc(((ngrp + 31) / 32) * sizeof(int));
+       seen = ma_zalloc(ma, ((ngrp + 31) / 32) * sizeof(int));
        if (seen == NULL) {
+               ma_close(ma, &ma_state);
                return BUN_NONE;
        }
 
@@ -1550,29 +1550,29 @@ doprod(const void *restrict values, oid 
                        }
                }
        }
-       GDKfree(seen);
+       ma_close(ma, &ma_state);
 
        return nils;
 
   unsupported:
-       GDKfree(seen);
+       ma_close(ma, &ma_state);
        GDKerror("%s: type combination (mul(%s)->%s) not supported.\n",
                 func, ATOMname(tp1), ATOMname(tp2));
        return BUN_NONE;
 
   overflow:
-       GDKfree(seen);
+       ma_close(ma, &ma_state);
        GDKerror("22003!overflow in product aggregate.\n");
        return BUN_NONE;
 
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to