Changeset: af12610859ae for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/af12610859ae Modified Files: clients/Tests/exports.stable.out gdk/gdk.h gdk/gdk_aggr.c gdk/gdk_bat.c gdk/gdk_batop.c gdk/gdk_calc_convert.c gdk/gdk_string.c gdk/gdk_utils.c gdk/gdk_value.c monetdb5/extras/rapi/rapi.c monetdb5/mal/mal.h monetdb5/mal/mal_builder.c monetdb5/mal/mal_client.c monetdb5/mal/mal_client.h monetdb5/mal/mal_function.c monetdb5/mal/mal_instruction.c monetdb5/mal/mal_instruction.h monetdb5/mal/mal_interpreter.c monetdb5/mal/mal_parser.c monetdb5/mal/mal_profiler.c monetdb5/mal/mal_session.c monetdb5/mal/mal_stack.c monetdb5/modules/mal/calc.c monetdb5/modules/mal/iterator.c monetdb5/modules/mal/mal_mapi.c monetdb5/modules/mal/manifold.c monetdb5/modules/mal/remote.c monetdb5/optimizer/opt_aliases.c monetdb5/optimizer/opt_coercion.c monetdb5/optimizer/opt_commonTerms.c monetdb5/optimizer/opt_constants.c monetdb5/optimizer/opt_costModel.c monetdb5/optimizer/opt_dataflow.c monetdb5/optimizer/opt_deadcode.c monetdb5/optimizer/opt_dict.c monetdb5/optimizer/opt_emptybind.c monetdb5/optimizer/opt_evaluate.c monetdb5/optimizer/opt_for.c monetdb5/optimizer/opt_garbageCollector.c monetdb5/optimizer/opt_generator.c monetdb5/optimizer/opt_inline.c monetdb5/optimizer/opt_inline.h monetdb5/optimizer/opt_matpack.c monetdb5/optimizer/opt_mergetable.c monetdb5/optimizer/opt_mitosis.c monetdb5/optimizer/opt_multiplex.c monetdb5/optimizer/opt_prelude.c monetdb5/optimizer/opt_prelude.h monetdb5/optimizer/opt_profiler.c monetdb5/optimizer/opt_projectionpath.c monetdb5/optimizer/opt_pushselect.c monetdb5/optimizer/opt_querylog.c monetdb5/optimizer/opt_remap.c monetdb5/optimizer/opt_remoteQueries.c monetdb5/optimizer/opt_reorder.c monetdb5/optimizer/opt_support.h sql/backends/monet5/UDF/capi/capi.c sql/backends/monet5/UDF/pyapi3/pyapi3.c sql/backends/monet5/generator/generator.c sql/backends/monet5/rel_bin.c sql/backends/monet5/sql.c sql/backends/monet5/sql_gencode.c sql/backends/monet5/sql_rank.c sql/backends/monet5/sql_scenario.c sql/backends/monet5/sql_statement.c sql/backends/monet5/sql_statement.h sql/common/sql_hash.c sql/common/sql_list.c sql/include/sql_hash.h sql/include/sql_list.h sql/include/sql_mem.h sql/scripts/23_skyserver.sql sql/server/rel_basetable.c sql/server/rel_optimizer.c sql/server/sql_parser.y sql/server/sql_var.c sql/storage/bat/bat_storage.c sql/storage/bat/bat_utils.c sql/storage/sql_catalog.c sql/storage/store.c sql/test/prepare/Tests/sqlancer_prepare.sql sql/test/prepare/Tests/sqlancer_prepare.stable.err sql/test/prepare/Tests/sqlancer_prepare.stable.err.int128 Branch: resource_management Log Message:
create new branch for resource_management improvements first steps: use allocators in mal interpreter (therefor also the VAL* functions can now optionaly have an allocator as first argument) use temp - allocators instead of temp GDKmalloc's in optimizers diffs (truncated from 4354 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 @@ -416,11 +416,11 @@ gdk_return TMsubcommit_list(bat *restric void VALclear(ValPtr v); int VALcmp(const ValRecord *p, const ValRecord *q); void *VALconvert(int typ, ValPtr t); -ValPtr VALcopy(ValPtr dst, const ValRecord *src); +ValPtr VALcopy(allocator *va, ValPtr dst, const ValRecord *src); void VALempty(ValPtr v); char *VALformat(const ValRecord *res) __attribute__((__warn_unused_result__)); void *VALget(ValPtr v); -ValPtr VALinit(ValPtr d, int tpe, const void *s); +ValPtr VALinit(allocator *va, ValPtr d, int tpe, const void *s); bool VALisnil(const ValRecord *v); ValPtr VALset(ValPtr v, int t, void *p); gdk_return VARcalcabsolute(ValPtr ret, const ValRecord *v); @@ -580,8 +580,10 @@ const ptr ptr_nil; struct dirent *readdir(DIR *dir); void rewinddir(DIR *dir); void *sa_alloc(allocator *sa, size_t sz); +void sa_close(allocator *sa); allocator *sa_create(allocator *pa); void sa_destroy(allocator *sa); +void sa_open(allocator *sa); void *sa_realloc(allocator *sa, void *ptr, size_t sz, size_t osz); allocator *sa_reset(allocator *sa); size_t sa_size(allocator *sa); @@ -880,8 +882,8 @@ char *concatErrors(char *err1, const cha const char *connectRef; const char *containsRef; str convertConstant(malType type, ValPtr vr); -InstrPtr copyInstruction(const InstrRecord *p); -InstrPtr copyInstructionArgs(const InstrRecord *p, int args); +InstrPtr copyInstruction(MalBlkPtr mb, const InstrRecord *p); +InstrPtr copyInstructionArgs(MalBlkPtr mb, const InstrRecord *p, int args); MalBlkPtr copyMalBlk(MalBlkPtr mb); const char *copy_fromRef; const char *corrRef; @@ -1085,6 +1087,7 @@ const char *minjarowinklerRef; const char *minusRef; const char *mirrorRef; const char *mitosisRef; +const char *mkeyRef; const char *mmathRef; const char *modRef; char monet_characteristics[4096]; diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -572,6 +572,128 @@ typedef struct Strimps Strimps; typedef struct RTree RTree; #endif + +#include <setjmp.h> + +typedef struct exception_buffer { +#ifdef HAVE_SIGLONGJMP + sigjmp_buf state; +#else + jmp_buf state; +#endif + int code; + char *msg; + int enabled; +} exception_buffer; + +gdk_export exception_buffer *eb_init(exception_buffer *eb); + +/* != 0 on when we return to the savepoint */ +#ifdef HAVE_SIGLONGJMP +#define eb_savepoint(eb) ((eb)->enabled = 1, sigsetjmp((eb)->state, 0)) +#else +#define eb_savepoint(eb) ((eb)->enabled = 1, setjmp((eb)->state)) +#endif +gdk_export _Noreturn void eb_error(exception_buffer *eb, char *msg, int val); + +typedef struct allocator { + struct allocator *pa; + size_t size; + size_t nr; + char **blks; + size_t used; /* memory used in last block */ + size_t usedmem; /* used memory */ + void *freelist; /* list of freed blocks */ + + size_t tmp_used; /* keeps total of tmp allocated bytes */ + bool tmp_active; /* currently only one level of temp usage */ + exception_buffer eb; +} allocator; + +gdk_export allocator *sa_create( allocator *pa ); +gdk_export allocator *sa_reset( allocator *sa ); +gdk_export void *sa_alloc( allocator *sa, size_t sz ); +gdk_export void *sa_zalloc( allocator *sa, size_t sz ); +gdk_export void *sa_realloc( allocator *sa, void *ptr, size_t sz, size_t osz ); +gdk_export void sa_destroy( allocator *sa ); +gdk_export char *sa_strndup( allocator *sa, const char *s, size_t l); +gdk_export char *sa_strdup( allocator *sa, const char *s); +gdk_export char *sa_strconcat( allocator *sa, const char *s1, const char *s2); +gdk_export size_t sa_size( allocator *sa ); +gdk_export void sa_open( allocator *sa ); /* open new frame of tempory allocations */ +gdk_export void sa_close( allocator *sa ); /* close temporary frame, reset to old state */ + +#define ma_create(pa) sa_create(pa) +#define ma_destroy(ma) sa_destroy(ma) +#define ma_alloc(ma, sz) (void*)sa_alloc(ma, sz) +#define ma_zalloc(ma, sz) (void*)sa_zalloc(ma, sz) +#define ma_open(ma) sa_open(ma) +#define ma_close(ma) sa_close(ma) + +#define MA_NEW( sa, type ) ((type*)sa_alloc( sa, sizeof(type))) +#define MA_ZNEW( sa, type ) ((type*)sa_zalloc( sa, sizeof(type))) +#define MA_NEW_ARRAY( sa, type, size ) (type*)sa_alloc( sa, ((size)*sizeof(type))) +#define MA_ZNEW_ARRAY( sa, type, size ) (type*)sa_zalloc( sa, ((size)*sizeof(type))) +#define MA_RENEW_ARRAY( sa, type, ptr, sz, osz ) (type*)sa_realloc( sa, ptr, ((sz)*sizeof(type)), ((osz)*sizeof(type))) +#define MA_STRDUP( sa, s) sa_strdup(sa, s) + + +#if !defined(NDEBUG) && !defined(__COVERITY__) && defined(__GNUC__) +#define sa_alloc(sa, sz) \ + ({ \ + allocator *_sa = (sa); \ + size_t _sz = (sz); \ + void *_res = sa_alloc(_sa, _sz); \ + TRC_DEBUG(ALLOC, \ + "sa_alloc(%p,%zu) -> %p\n", \ + _sa, _sz, _res); \ + _res; \ + }) +#define sa_zalloc(sa, sz) \ + ({ \ + allocator *_sa = (sa); \ + size_t _sz = (sz); \ + void *_res = sa_zalloc(_sa, _sz); \ + TRC_DEBUG(ALLOC, \ + "sa_zalloc(%p,%zu) -> %p\n", \ + _sa, _sz, _res); \ + _res; \ + }) +#define sa_realloc(sa, ptr, sz, osz) \ + ({ \ + allocator *_sa = (sa); \ + void *_ptr = (ptr); \ + size_t _sz = (sz); \ + size_t _osz = (osz); \ + void *_res = sa_realloc(_sa, _ptr, _sz, _osz); \ + TRC_DEBUG(ALLOC, \ + "sa_realloc(%p,%p,%zu,%zu) -> %p\n", \ + _sa, _ptr, _sz, _osz, _res); \ + _res; \ + }) +#define sa_strdup(sa, s) \ + ({ \ + allocator *_sa = (sa); \ + const char *_s = (s); \ + char *_res = sa_strdup(_sa, _s); \ + TRC_DEBUG(ALLOC, \ + "sa_strdup(%p,len=%zu) -> %p\n", \ + _sa, strlen(_s), _res); \ + _res; \ + }) +#define sa_strndup(sa, s, l) \ + ({ \ + allocator *_sa = (sa); \ + const char *_s = (s); \ + size_t _l = (l); \ + char *_res = sa_strndup(_sa, _s, _l); \ + TRC_DEBUG(ALLOC, \ + "sa_strndup(%p,len=%zu) -> %p\n", \ + _sa, _l, _res); \ + _res; \ + }) +#endif + /* * @+ Binary Association Tables * Having gone to the previous preliminary definitions, we will now @@ -646,15 +768,17 @@ typedef struct { } val; size_t len; short vtype; - bool bat; + unsigned short bat:1, + allocated:1; + } *ValPtr, ValRecord; /* interface definitions */ gdk_export void *VALconvert(int typ, ValPtr t); gdk_export char *VALformat(const ValRecord *res) __attribute__((__warn_unused_result__)); -gdk_export ValPtr VALcopy(ValPtr dst, const ValRecord *src); -gdk_export ValPtr VALinit(ValPtr d, int tpe, const void *s); +gdk_export ValPtr VALcopy(allocator *va, ValPtr dst, const ValRecord *src); +gdk_export ValPtr VALinit(allocator *va, ValPtr d, int tpe, const void *s); gdk_export void VALempty(ValPtr v); gdk_export void VALclear(ValPtr v); gdk_export ValPtr VALset(ValPtr v, int t, void *p); @@ -2496,106 +2620,4 @@ gdk_export gdk_return gdk_add_callback(c *argv[], int interval); gdk_export gdk_return gdk_remove_callback(char *, gdk_callback_func *f); - -#include <setjmp.h> - -typedef struct exception_buffer { -#ifdef HAVE_SIGLONGJMP - sigjmp_buf state; -#else - jmp_buf state; -#endif - int code; - char *msg; - int enabled; -} exception_buffer; - -gdk_export exception_buffer *eb_init(exception_buffer *eb); - -/* != 0 on when we return to the savepoint */ -#ifdef HAVE_SIGLONGJMP -#define eb_savepoint(eb) ((eb)->enabled = 1, sigsetjmp((eb)->state, 0)) -#else -#define eb_savepoint(eb) ((eb)->enabled = 1, setjmp((eb)->state)) -#endif -gdk_export _Noreturn void eb_error(exception_buffer *eb, char *msg, int val); - -typedef struct allocator { - struct allocator *pa; - size_t size; - size_t nr; - char **blks; - size_t used; /* memory used in last block */ - size_t usedmem; /* used memory */ - void *freelist; /* list of freed blocks */ - exception_buffer eb; -} allocator; - -gdk_export allocator *sa_create( allocator *pa ); -gdk_export allocator *sa_reset( allocator *sa ); -gdk_export void *sa_alloc( allocator *sa, size_t sz ); -gdk_export void *sa_zalloc( allocator *sa, size_t sz ); -gdk_export void *sa_realloc( allocator *sa, void *ptr, size_t sz, size_t osz ); -gdk_export void sa_destroy( allocator *sa ); -gdk_export char *sa_strndup( allocator *sa, const char *s, size_t l); -gdk_export char *sa_strdup( allocator *sa, const char *s); -gdk_export char *sa_strconcat( allocator *sa, const char *s1, const char *s2); -gdk_export size_t sa_size( allocator *sa ); - -#if !defined(NDEBUG) && !defined(__COVERITY__) && defined(__GNUC__) -#define sa_alloc(sa, sz) \ - ({ \ - allocator *_sa = (sa); \ - size_t _sz = (sz); \ - void *_res = sa_alloc(_sa, _sz); \ - TRC_DEBUG(ALLOC, \ - "sa_alloc(%p,%zu) -> %p\n", \ - _sa, _sz, _res); \ - _res; \ - }) -#define sa_zalloc(sa, sz) \ - ({ \ - allocator *_sa = (sa); \ - size_t _sz = (sz); \ - void *_res = sa_zalloc(_sa, _sz); \ - TRC_DEBUG(ALLOC, \ - "sa_zalloc(%p,%zu) -> %p\n", \ - _sa, _sz, _res); \ - _res; \ - }) -#define sa_realloc(sa, ptr, sz, osz) \ - ({ \ - allocator *_sa = (sa); \ - void *_ptr = (ptr); \ - size_t _sz = (sz); \ - size_t _osz = (osz); \ - void *_res = sa_realloc(_sa, _ptr, _sz, _osz); \ - TRC_DEBUG(ALLOC, \ - "sa_realloc(%p,%p,%zu,%zu) -> %p\n", \ - _sa, _ptr, _sz, _osz, _res); \ - _res; \ - }) -#define sa_strdup(sa, s) \ - ({ \ - allocator *_sa = (sa); \ - const char *_s = (s); \ - char *_res = sa_strdup(_sa, _s); \ - TRC_DEBUG(ALLOC, \ - "sa_strdup(%p,len=%zu) -> %p\n", \ - _sa, strlen(_s), _res); \ - _res; \ - }) -#define sa_strndup(sa, s, l) \ - ({ \ - allocator *_sa = (sa); \ - const char *_s = (s); \ - size_t _l = (l); \ - char *_res = sa_strndup(_sa, _s, _l); \ - TRC_DEBUG(ALLOC, \ _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org