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 -- [email protected]
To unsubscribe send an email to [email protected]