Changeset: 881276547470 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=881276547470 Added Files: ChangeLog.Jun2016 gdk/gdk_interprocess.c gdk/gdk_interprocess.h java/tests/Test_PSgetObject.java sql/backends/monet5/Tests/pyapi31.sql sql/jdbc/tests/Tests/Test_PSgetObject.SQL.bat sql/jdbc/tests/Tests/Test_PSgetObject.SQL.sh sql/jdbc/tests/Tests/Test_PSgetObject.stable.err sql/jdbc/tests/Tests/Test_PSgetObject.stable.out sql/test/mergetables/Tests/mergedropcascade.sql sql/test/mergetables/Tests/mergedropcascade.stable.err sql/test/mergetables/Tests/mergedropcascade.stable.out Removed Files: gdk/interprocess.c gdk/interprocess.h Modified Files: clients/Tests/exports.stable.out clients/mapiclient/mclient.c common/stream/stream.c gdk/Makefile.ag gdk/gdk.h gdk/gdk_aggr.c gdk/gdk_align.c gdk/gdk_bat.c gdk/gdk_batop.c gdk/gdk_bbp.c gdk/gdk_calc.c gdk/gdk_calc_compare.h gdk/gdk_cross.c gdk/gdk_delta.c gdk/gdk_delta.h gdk/gdk_firstn.c gdk/gdk_group.c gdk/gdk_hash.c gdk/gdk_hash.h gdk/gdk_heap.c gdk/gdk_imprints.c gdk/gdk_join.c gdk/gdk_logger.c gdk/gdk_orderidx.c gdk/gdk_private.h gdk/gdk_project.c gdk/gdk_sample.c gdk/gdk_select.c gdk/gdk_storage.c gdk/gdk_unique.c java/src/main/java/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java java/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java monetdb5/extras/pyapi/connection.c monetdb5/extras/pyapi/pyapi.c monetdb5/extras/rapi/converters.c.h monetdb5/extras/sphinx/sphinx.c monetdb5/mal/mal_authorize.c monetdb5/mal/mal_debugger.c monetdb5/mal/mal_module.c monetdb5/mal/mal_parser.c monetdb5/mal/mal_profiler.c monetdb5/mal/mal_resource.c monetdb5/mal/mal_runtime.c monetdb5/modules/atoms/batxml.c monetdb5/modules/atoms/json.c monetdb5/modules/atoms/mtime.c monetdb5/modules/kernel/algebra.c monetdb5/modules/kernel/bat5.c monetdb5/modules/kernel/batcolor.c monetdb5/modules/kernel/batmmath.c monetdb5/modules/kernel/batstr.c monetdb5/modules/kernel/status.c monetdb5/modules/mal/manifold.c monetdb5/modules/mal/mat.c monetdb5/modules/mal/mkey.c monetdb5/modules/mal/orderidx.c monetdb5/modules/mal/pcre.c monetdb5/modules/mal/remote.c monetdb5/modules/mal/tablet.c monetdb5/modules/mal/tokenizer.c monetdb5/modules/mal/zorder.c monetdb5/optimizer/opt_reorder.c sql/backends/monet5/generator/generator.c sql/backends/monet5/sql.c sql/backends/monet5/sql_cast_impl_down_from_int.h sql/backends/monet5/sql_cast_impl_up_to_flt.h sql/backends/monet5/sql_cast_impl_up_to_int.h sql/backends/monet5/sql_fround_impl.h sql/backends/monet5/sql_optimizer.c sql/backends/monet5/sql_rank.c sql/backends/monet5/sql_round_impl.h sql/backends/monet5/sql_statistics.c sql/backends/monet5/sql_upgrades.c sql/backends/monet5/vaults/bam/bam_lib.c sql/backends/monet5/vaults/netcdf/netcdf.c sql/jdbc/tests/Tests/All sql/server/rel_exp.c sql/server/rel_exp.h sql/server/rel_optimizer.c sql/server/rel_planner.c sql/server/rel_schema.c sql/server/sql_atom.c sql/server/sql_atom.h sql/server/sql_mvc.c sql/server/sql_mvc.h sql/storage/bat/bat_storage.c sql/storage/bat/bat_table.c sql/storage/store.c sql/test/BugTracker-2009/Tests/explain_gives_crash.SF-2741829.stable.out sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out sql/test/mergetables/Tests/All sql/test/mergetables/Tests/part-elim.sql sql/test/pg_regress/Tests/point.sql sql/test/pg_regress/Tests/point.stable.err sql/test/pg_regress/Tests/point.stable.out testing/Mtest.py.in Branch: sfcgal Log Message:
merged with default diffs (truncated from 13368 to 300 lines): diff --git a/ChangeLog.Jun2016 b/ChangeLog.Jun2016 new file mode 100644 --- /dev/null +++ b/ChangeLog.Jun2016 @@ -0,0 +1,6 @@ +# ChangeLog file for candidate +# This file is updated with Maddlog + +* Fri Jul 1 2016 Sjoerd Mullender <sjo...@acm.org> +- Lots of memory leaks have been plugged across the whole system. + 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 @@ -211,7 +211,13 @@ size_t GDK_mem_maxsize; size_t GDK_vm_maxsize; int GDK_vm_trim; int GDKatomcnt; +size_t GDKbatcopy(char *dest, BAT *bat, str colname); +size_t GDKbatcopysize(BAT *bat, str colname); +size_t GDKbatread(char *src, BAT **bat, str *colname); +gdk_return GDKchangesemval(int sem_id, int number, int change, str *msg); +gdk_return GDKchangesemval_timeout(int sem_id, int number, int change, int timeout_mseconds, bool *succeed, str *msg); gdk_return GDKcreatedir(const char *nme); +gdk_return GDKcreatesem(int id, int count, int *semid, str *msg); int GDKdebug; void GDKerror(_In_z_ _Printf_format_string_ const char *format, ...) __attribute__((__format__(__printf__, 1, 2))); void GDKexit(int status) __attribute__((__noreturn__)); @@ -229,7 +235,10 @@ char *GDKgetenv(const char *name); int GDKgetenv_int(const char *name, int def); int GDKgetenv_istrue(const char *name); int GDKgetenv_isyes(const char *name); +gdk_return GDKgetsem(int sem_id, int count, int *semid, str *msg); +gdk_return GDKgetsemval(int sem_id, int number, int *semval, str *msg); int GDKinit(opt *set, int setlen); +gdk_return GDKinitmmap(size_t id, size_t size, void **return_ptr, size_t *return_size, str *msg); BAT *GDKkey; ATOMIC_TYPE volatile GDKlockcnt; ATOMIC_TYPE volatile GDKlockcontentioncnt; @@ -241,6 +250,7 @@ void *GDKmalloc(size_t size) __attribute size_t GDKmem_cursize(void); gdk_return GDKmergeidx(BAT *b, BAT **a, int n_ar); void *GDKmmap(const char *path, int mode, size_t len); +gdk_return GDKmmapfile(str buffer, size_t max, size_t id); int GDKms(void); int GDKnr_threads; void GDKprepareExit(void); @@ -248,6 +258,8 @@ void GDKqsort(void *h, void *t, const vo void GDKqsort_rev(void *h, void *t, const void *base, size_t n, int hs, int ts, int tpe); void *GDKrealloc(void *pold, size_t size) __attribute__((__warn_unused_result__)); void GDKregister(MT_Id pid); +gdk_return GDKreleasemmap(void *ptr, size_t size, size_t id, str *msg); +gdk_return GDKreleasesem(int sem_id, str *msg); void GDKreset(int status); void GDKsetenv(str name, str value); ssize_t GDKstrFromStr(unsigned char *dst, const unsigned char *src, ssize_t len); @@ -255,7 +267,8 @@ str GDKstrdup(const char *s) __attribute str GDKstrndup(const char *s, size_t n) __attribute__((__warn_unused_result__)); void GDKsyserror(_In_z_ _Printf_format_string_ const char *format, ...) __attribute__((__format__(__printf__, 1, 2))); ThreadRec GDKthreads[THREADS]; -gdk_return GDKupgradevarheap(COLrec *c, var_t v, int copyall, int mayshare); +size_t GDKuniqueid(size_t offset); +gdk_return GDKupgradevarheap(BAT *b, var_t v, int copyall, int mayshare); lng GDKusec(void); BAT *GDKval; const char *GDKversion(void); diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c --- a/clients/mapiclient/mclient.c +++ b/clients/mapiclient/mclient.c @@ -1995,6 +1995,8 @@ doFileBulk(Mapi mid, stream *fp) buf = malloc(bufsize + 1); if (!buf) { fprintf(stderr, "cannot allocate memory for send buffer\n"); + if (fp) + close_stream(fp); return 1; } @@ -2067,6 +2069,8 @@ doFileBulk(Mapi mid, stream *fp) free(buf); mnstr_flush(toConsole); + if (fp) + close_stream(fp); return errseen; } @@ -2637,11 +2641,12 @@ doFile(Mapi mid, stream *fp, int useinse * convert filename from UTF-8 * to locale */ if ((s = open_rastream(line)) == NULL || - mnstr_errnr(s)) + mnstr_errnr(s)) { + if (s) + close_stream(s); fprintf(stderr, "%s: cannot open\n", line); - else + } else doFile(mid, s, 0, 0, 0); - close_stream(s); continue; } case '>': @@ -2832,6 +2837,7 @@ doFile(Mapi mid, stream *fp, int useinse if (prompt) deinit_readline(); #endif + close_stream(fp); return errseen; } @@ -3381,7 +3387,9 @@ main(int argc, char **argv) stream *s; if (fp == NULL && - (fp = fopen(argv[optind], "r")) == NULL) { + (fp = (strcmp(argv[optind], "-") == 0 ? + stdin : + fopen(argv[optind], "r"))) == NULL) { fprintf(stderr, "%s: cannot open\n", argv[optind]); c |= 1; } else if ((s = file_rastream(fp, argv[optind])) == NULL) { @@ -3389,7 +3397,6 @@ main(int argc, char **argv) c |= 1; } else { c |= doFile(mid, s, useinserts, interactive, save_history); - close_stream(s); } fp = NULL; optind++; @@ -3400,7 +3407,6 @@ main(int argc, char **argv) if (!has_fileargs && command == NULL) { stream *s = file_rastream(stdin, "<stdin>"); c = doFile(mid, s, useinserts, interactive, save_history); - mnstr_destroy(s); } mapi_destroy(mid); diff --git a/common/stream/stream.c b/common/stream/stream.c --- a/common/stream/stream.c +++ b/common/stream/stream.c @@ -4575,6 +4575,8 @@ cb_destroy(stream *s) if (cb->destroy) (*cb->destroy)(cb->private); + free(cb); + s->stream_data.p = NULL; destroy(s); } diff --git a/gdk/Makefile.ag b/gdk/Makefile.ag --- a/gdk/Makefile.ag +++ b/gdk/Makefile.ag @@ -30,9 +30,10 @@ lib_gdk = { gdk_imprints.c gdk_imprints.h \ gdk_join.c gdk_project.c \ gdk_unique.c \ + gdk_interprocess.c gdk_interprocess.h \ gdk_firstn.c \ bat.feps bat1.feps bat2.feps \ - libbat.rc interprocess.c interprocess.h + libbat.rc LIBS = ../common/options/libmoptions \ ../common/stream/libstream \ ../common/utils/libmutils \ diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -391,22 +391,18 @@ #define GDKisalnum(c) isalnum((int) (unsigned char) (c)) #define GDKisdigit(c) (((unsigned char) (c)) >= '0' && ((unsigned char) (c)) <= '9') -#define GDKPROP 6 /* use one spare! */ -#define MONETHOME "MONETHOME" #ifndef NATIVE_WIN32 #define BATDIR "bat" #define DELDIR "bat/DELETE_ME" #define BAKDIR "bat/BACKUP" #define SUBDIR "bat/BACKUP/SUBCOMMIT" #define LEFTDIR "bat/LEFTOVERS" -#define HCDIR "bat/HC" #else #define BATDIR "bat" #define DELDIR "bat\\DELETE_ME" #define BAKDIR "bat\\BACKUP" #define SUBDIR "bat\\BACKUP\\SUBCOMMIT" #define LEFTDIR "bat\\LEFTOVERS" -#define HCDIR "bat\\HC" #endif #ifdef MAXPATHLEN @@ -586,11 +582,9 @@ typedef oid var_t; /* type used for hea #define SIZEOF_VAR_T SIZEOF_OID #define VARFMT OIDFMT -#if SIZEOF_VAR_T == SIZEOF_INT /* a type compatible with var_t */ -#define TYPE_var TYPE_int +#if SIZEOF_VAR_T == SIZEOF_INT #define VAR_MAX ((var_t) INT_MAX) #else -#define TYPE_var TYPE_lng #define VAR_MAX ((var_t) LLONG_MAX) #endif @@ -637,12 +631,13 @@ typedef enum { GDK_FAIL, GDK_SUCCEED } g /* Heap storage modes */ typedef enum { - STORE_MEM = 0, /* load into GDKmalloced memory */ - STORE_MMAP = 1, /* mmap() into virtual memory */ - STORE_PRIV = 2, /* BAT copy of copy-on-write mmap */ - STORE_CMEM = 3, /* Indicates the value is stored in regular C memory rather than GDK memory.*/ - STORE_NOWN = 4, /* Indicates that the bat does not own the chunk of memory and is not in charge of freeing it.*/ - STORE_MMAPABS = 5, /* mmap() into virtual memory from an absolute path (not part of dbfarm) */ + STORE_MEM = 0, /* load into GDKmalloced memory */ + STORE_MMAP = 1, /* mmap() into virtual memory */ + STORE_PRIV = 2, /* BAT copy of copy-on-write mmap */ + STORE_CMEM = 3, /* load into malloc (not GDKmalloc) memory*/ + STORE_NOWN = 4, /* memory not owned by the BAT */ + STORE_MMAPABS = 5, /* mmap() into virtual memory from an + * absolute path (not part of dbfarm) */ STORE_INVALID /* invalid value, used to indicate error */ } storage_t; @@ -653,8 +648,8 @@ typedef struct { str filename; /* file containing image of the heap */ unsigned int copied:1, /* a copy of an existing map. */ - hashash:1,/* the string heap contains hash values */ - forcemap:1; /* force STORE_MMAP even if heap exists */ + hashash:1, /* the string heap contains hash values */ + forcemap:1; /* force STORE_MMAP even if heap exists */ storage_t storage; /* storage mode (mmap/malloc). */ storage_t newstorage; /* new desired storage mode at re-allocation. */ bte dirty; /* specific heap dirty marker */ @@ -886,48 +881,56 @@ typedef struct BAT { oid hseqbase; /* head seq base */ /* dynamic column properties */ - COLrec *T; /* column info */ + COLrec T; /* column info */ - BATrec *S; /* the BAT properties */ + BATrec S; /* the BAT properties */ } BAT; typedef struct BATiter { BAT *b; - oid hvid, tvid; + oid tvid; } BATiter; -typedef struct BATstore BATstore; -#define BATSTORESIZE (2 * (sizeof(BAT) + sizeof(COLrec)) + sizeof(BATrec)) - -typedef int (*GDKfcn) (); - -/* macros's to hide complexity of BAT structure */ -#define batPersistence S->persistence -#define batCopiedtodisk S->copiedtodisk -#define batDirty S->dirty -#define batConvert S->convert -#define batDirtyflushed S->dirtyflushed -#define batDirtydesc S->descdirty -#define batFirst S->first -#define batInserted S->inserted -#define batDeleted S->deleted -#define batCount S->count -#define batCapacity S->capacity -#define batStamp S->stamp -#define batSharecnt S->sharecnt -#define batRestricted S->restricted -#define batRole S->role -#define creator_tid S->tid -#define ttype T->type -#define tkey T->key -#define tvarsized T->varsized -#define tseqbase T->seq -#define tsorted T->sorted -#define trevsorted T->revsorted -#define tdense T->dense -#define tident T->id -#define talign T->align -#define torderidx T->orderidx +/* macros to hide complexity of the BAT structure */ +#define batPersistence S.persistence +#define batCopiedtodisk S.copiedtodisk +#define batDirty S.dirty +#define batConvert S.convert +#define batDirtyflushed S.dirtyflushed +#define batDirtydesc S.descdirty +#define batFirst S.first +#define batInserted S.inserted +#define batDeleted S.deleted +#define batCount S.count +#define batCapacity S.capacity +#define batStamp S.stamp +#define batSharecnt S.sharecnt +#define batRestricted S.restricted +#define batRole S.role _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list