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

Reply via email to