Changeset: af9dfd098711 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=af9dfd098711 Added Files: sql/test/pg_regress/Tests/oid.stable.err.oid32.int128 Modified Files: clients/Tests/All clients/Tests/exports.stable.out clients/mapilib/mapi.c gdk/gdk_bat.c gdk/gdk_bbp.c gdk/gdk_private.h gdk/gdk_system.c gdk/gdk_utils.c gdk/gdk_utils.h java/ChangeLog java/src/main/java/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java monetdb5/mal/mal.c monetdb5/mal/mal.h monetdb5/mal/mal_authorize.c monetdb5/mal/mal_client.c monetdb5/mal/mal_dataflow.c monetdb5/mal/mal_factory.c monetdb5/mal/mal_linker.c monetdb5/mal/mal_module.c monetdb5/mal/mal_namespace.c monetdb5/mal/mal_private.h monetdb5/mal/mal_recycle.c monetdb5/mal/mal_resource.c monetdb5/mal/mal_runtime.c monetdb5/mal/mal_scenario.c monetdb5/modules/kernel/bat5.c monetdb5/modules/mal/Tests/remote03.malC monetdb5/modules/mal/Tests/remote03.stable.err sql/backends/monet5/sql_scenario.c sql/test/BugTracker-2012/Tests/querycache.Bug-3212.stable.out sql/test/BugTracker/Tests/insert_not_exists.SF-1380287.stable.out sql/test/Skyserver/Tests/Skyserver.stable.out sql/test/Tests/All sql/test/bugs/Tests/unicode_varchar-bug-sf-1041324_JdbcClient.stable.out sql/test/bugs/Tests/unicode_varchar-bug-sf-1041324_MapiClient.stable.out sql/test/leaks/Tests/All sql/test/pg_regress/Tests/int8.sql sql/test/pg_regress/Tests/int8.stable.err sql/test/pg_regress/Tests/int8.stable.out sql/test/pg_regress/Tests/int8.stable.out.int128 sql/test/pg_regress/Tests/random.sql sql/test/pg_regress/Tests/random.stable.out sql/test/pg_regress/Tests/strings.stable.out tools/embedded/rpackage/configure Branch: embedded-java Log Message:
Merge with embedded branch diffs (truncated from 2029 to 300 lines): diff --git a/clients/Tests/All b/clients/Tests/All --- a/clients/Tests/All +++ b/clients/Tests/All @@ -1,4 +1,4 @@ exports -HAVE_NETCDF&HAVE_FITS&HAVE_GEOM&HAVE_GSL&HAVE_LIBR&HAVE_SAMTOOLS&HAVE_SPHINXCLIENT?MAL-signatures -HAVE_NETCDF&HAVE_FITS&HAVE_GEOM&HAVE_GSL&HAVE_SAMTOOLS&!BITS32&!BITS64OID32?SQL-dump +HAVE_FITS&HAVE_GEOM&HAVE_GSL&HAVE_LIBR&!HAVE_LIDAR&HAVE_NETCDF&HAVE_SAMTOOLS&HAVE_SPHINXCLIENT?MAL-signatures +!BITS32&!BITS64OID32&HAVE_FITS&HAVE_GEOM&HAVE_GSL&!HAVE_LIDAR&HAVE_NETCDF&HAVE_SAMTOOLS?SQL-dump MERCURIAL?malcheck 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 @@ -236,6 +236,7 @@ int GDKnr_threads; void GDKqsort(void *h, void *t, const void *base, size_t n, int hs, int ts, int tpe); 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 GDKreset(int status); void GDKsetenv(str name, str value); ssize_t GDKstrFromStr(unsigned char *dst, const unsigned char *src, ssize_t len); str GDKstrdup(const char *s) __attribute__((__warn_unused_result__)); @@ -722,6 +723,7 @@ str AUTHgetUsername(str *ret, Client c); str AUTHgetUsers(BAT **ret1, BAT **ret2, Client c); str AUTHinitTables(str *passwd); str AUTHremoveUser(Client c, str *username); +void AUTHreset(void) __attribute__((__visibility__("hidden"))); str AUTHresolveUser(str *ret, oid *uid); str AUTHsetPassword(Client c, str *username, str *passwd); str AUTHunlockVault(str *password); @@ -2190,15 +2192,24 @@ str malCommandCall(MalStkPtr stk, InstrP int malProfileMode; str malRef; MT_Lock mal_beatLock; +void mal_client_reset(void) __attribute__((__visibility__("hidden"))); ClientRec *mal_clients; MT_Lock mal_contextLock; MT_Lock mal_copyLock; +void mal_dataflow_reset(void) __attribute__((__visibility__("hidden"))); MT_Lock mal_delayLock; void mal_exit(void); +void mal_factory_reset(void) __attribute__((__visibility__("hidden"))); int mal_init(void); +void mal_linker_reset(void) __attribute__((__visibility__("hidden"))); +void mal_module_reset(void) __attribute__((__visibility__("hidden"))); +void mal_namespace_reset(void) __attribute__((__visibility__("hidden"))); MT_Lock mal_profileLock; str mal_quote(const char *msg, size_t size); MT_Lock mal_remoteLock; +void mal_resource_reset(void) __attribute__((__visibility__("hidden"))); +void mal_runtime_reset(void) __attribute__((__visibility__("hidden"))); +void mal_scenario_reset(void) __attribute__((__visibility__("hidden"))); int mal_trace; void mal_unquote(char *msg); str manifoldRef; @@ -2253,6 +2264,7 @@ char monet_characteristics[PATHLENGTH]; char monet_cwd[PATHLENGTH]; size_t monet_memory; void moveInstruction(MalBlkPtr mb, int pc, int target); +void mserver_reset(void); str mtimeRef; str mulRef; str multicolumnRef; diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c --- a/clients/mapilib/mapi.c +++ b/clients/mapilib/mapi.c @@ -1593,7 +1593,9 @@ close_result(MapiHdl hdl) hdl->active == result && read_into_cache(hdl, -1) != MOK) return MERROR; - assert(hdl->active != result); + if( hdl->active == result) + return MERROR; + //assert(hdl->active != result); if (result->fields) { for (i = 0; i < result->maxfields; i++) { if (result->fields[i].tablename) diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c --- a/gdk/gdk_bat.c +++ b/gdk/gdk_bat.c @@ -1067,16 +1067,23 @@ BUNdelete(BAT *b, oid o) /* no longer sorted */ b->tsorted = b->trevsorted = 0; } + if (b->T->nosorted >= p) + b->T->nosorted = 0; + if (b->T->norevsorted >= p) + b->T->norevsorted = 0; b->batCount--; if (b->batCount <= 1) { /* some trivial properties */ b->tkey |= 1; b->tsorted = b->trevsorted = 1; + b->T->nosorted = b->T->norevsorted = 0; if (b->batCount == 0) { b->T->nil = 0; b->T->nonil = 1; } } + IMPSdestroy(b); + HASHdestroy(b); return GDK_SUCCEED; } diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -119,6 +119,7 @@ static gdk_return BBPdir(int cnt, bat *s static MT_Lock stampLock MT_LOCK_INITIALIZER("stampLock"); #endif static volatile ATOMIC_TYPE stamp = 0; + static inline int BBPstamp(void) { @@ -3923,8 +3924,7 @@ BBPdiskscan(const char *parent) #else delete = TRUE; #endif - } else if (strncmp(p + 1, "hhash", 5) == 0 || - strncmp(p + 1, "thash", 5) == 0) { + } else if (strncmp(p + 1, "thash", 5) == 0) { #ifdef PERSISTENTHASH BAT *b = getdesc(bid); delete = b == NULL; @@ -4019,3 +4019,34 @@ BBPatom_load(int atom) } #endif +void +gdk_bbp_reset(void) +{ + memset((char*) BBP, 0, sizeof(BBP)); + BBPlimit = 0; + BBPsize = 0; + memset((char*) BBPfarms, 0, sizeof(BBPfarms)); + BBP_hash = 0; + BBP_mask = 0; + stamp = 0; + + BBP_curstamp = 0; + BBP_notrim = ~((MT_Id) 0); + BBP_dirty = 0; + BBPin = 0; + BBPout = 0; + + locked_by = 0; + BBPunloadCnt = 0; + memset((char*) lastused, 0, sizeof(lastused)); + memset((char*) bbptrim, 0, sizeof(bbptrim)); + bbptrimfirst = BBPMAXTRIM; + bbptrimlast = 0; + bbptrimmax = BBPMAXTRIM; + bbpscanstart = 1; + bbpunloadtail = 0; + bbpunload = 0; + backup_files = 0; + backup_dir = 0; + backup_subdir = 0; +} diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h --- a/gdk/gdk_private.h +++ b/gdk/gdk_private.h @@ -94,6 +94,8 @@ void BBPdump(void); /* never called: fo __attribute__((__visibility__("hidden"))); __hidden void BBPunshare(bat b) __attribute__((__visibility__("hidden"))); +__hidden void gdk_bbp_reset(void) + __attribute__((__visibility__("hidden"))); __hidden gdk_return BUNreplace(BAT *b, oid left, const void *right, bit force) __attribute__((__visibility__("hidden"))); __hidden void GDKclrerr(void) @@ -205,6 +207,10 @@ void BBPdump(void); /* never called: fo __attribute__((__visibility__("hidden"))); __hidden BAT *virtualize(BAT *bn) __attribute__((__visibility__("hidden"))); +__hidden void gdk_bbp_reset(void) + __attribute__((__visibility__("hidden"))); +__hidden void gdk_system_reset(void) + __attribute__((__visibility__("hidden"))); #define BBP_BATMASK 511 #define BBP_THREADMASK 63 diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c --- a/gdk/gdk_system.c +++ b/gdk/gdk_system.c @@ -165,6 +165,12 @@ static struct winthread { static CRITICAL_SECTION winthread_cs; static int winthread_cs_init = 0; +void +gdk_system_reset(void) +{ + winthread_cs_init = 0; +} + static struct winthread * find_winthread(DWORD tid) { diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c --- a/gdk/gdk_utils.c +++ b/gdk/gdk_utils.c @@ -24,6 +24,9 @@ static char GDKdbpathStr[PATHLENGTH] = { BAT *GDKkey = NULL; BAT *GDKval = NULL; +int GDKdebug = 0; + +static char THRprintbuf[BUFSIZ]; #include <signal.h> @@ -1239,46 +1242,49 @@ GDKexiting(void) /* coverity[+kill] */ void -GDKexit(int status) +GDKreset(int status) { -#ifndef HAVE_EMBEDDED - if (GDKlockFile == NULL) { - /* no database lock, so no threads, so exit now */ - MT_global_exit(status); + MT_Id pid = MT_getpid(); + Thread t, s; + int i; + + if( GDKkey){ + BBPunfix(GDKkey->batCacheid); + GDKkey = 0; } -#endif - if (ATOMIC_TAS(GDKstopped, GDKstoppedLock) == 0) { - MT_Id pid = MT_getpid(); - Thread t, s; - int i; + if( GDKval){ + BBPunfix(GDKval->batCacheid); + GDKval = 0; + } + if (GDKvmtrim_id) + MT_join_thread(GDKvmtrim_id); + /* first give the other threads a chance to exit properly*/ + for (i = 0; i < 10 && GDKnrofthreads; i++) { + MT_lock_set(&GDKthreadLock); + for (t = GDKthreads, s = t + THREADS; t < s; t++) + if (t->pid && t->pid != pid) + break; + MT_lock_unset(&GDKthreadLock); + if (t == s) /* no other threads? */ + break; + MT_sleep_ms(CATNAP); + } + if (status == 0) { + /* they had there chance, now kill them */ MT_lock_set(&GDKthreadLock); - GDKnrofthreads = 0; - MT_lock_unset(&GDKthreadLock); - if (GDKvmtrim_id) - MT_join_thread(GDKvmtrim_id); - /* first give the other threads a chance to exit */ - for (i = 0; i < 10; i++) { - MT_lock_set(&GDKthreadLock); - for (t = GDKthreads, s = t + THREADS; t < s; t++) - if (t->pid && t->pid != pid) - break; - MT_lock_unset(&GDKthreadLock); - if (t == s) /* no other threads? */ - break; - MT_sleep_ms(CATNAP); + for (t = GDKthreads, s = t + THREADS; t < s; t++) { + if (t->pid) { + MT_Id victim = t->pid; + + if (t->pid != pid) { + fprintf(stderr, "#GDKexit: killing thread %d\n", MT_kill_thread(victim)); + } + GDKnrofthreads --; + } } - if (status == 0) { - /* they had their chance, now kill them */ - MT_lock_set(&GDKthreadLock); - for (t = GDKthreads, s = t + THREADS; t < s; t++) { - if (t->pid && t->pid != pid) { - fprintf(stderr, "#GDKexit: killing thread\n"); - MT_kill_thread(t->pid); - } - } - MT_lock_unset(&GDKthreadLock); - } + assert(GDKnrofthreads == 0); + /* all threads ceased running, now we can clean up */ #if 0 /* we can't clean up after killing threads */ BBPexit(); @@ -1288,14 +1294,51 @@ GDKexit(int status) #if !defined(USE_PTHREAD_LOCKS) && !defined(NDEBUG) TEMDEBUG GDKlockstatistics(1); #endif _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list