Changeset: 8b5c802e24b4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8b5c802e24b4
Modified Files:
        gdk/gdk_utils.c
        gdk/gdk_utils.h
        tools/embedded/embedded.c
Branch: embedded
Log Message:

Only do jumping games if initializing. Otherwise, cross-thread jumps happen and 
those are very naughty


diffs (114 lines):

diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -1576,6 +1576,7 @@ GDKclrerr(void)
 
 jmp_buf GDKfataljump;
 str GDKfatalmsg;
+bit GDKfataljumpenable = 0;
 
 /* coverity[+kill] */
 void
@@ -1598,31 +1599,31 @@ GDKfatal(const char *format, ...)
        vsnprintf(message + len, sizeof(message) - (len + 2), format, ap);
        va_end(ap);
 
-#ifndef HAVE_EMBEDDED
-       fputs(message, stderr);
-       fputs("\n", stderr);
-       fflush(stderr);
+       if (!GDKfataljumpenable) {
+               fputs(message, stderr);
+               fputs("\n", stderr);
+               fflush(stderr);
 
-       /*
-        * Real errors should be saved in the log file for post-crash
-        * inspection.
-        */
-       if (GDKexiting()) {
-               fflush(stdout);
-               MT_exit_thread(1);
-               /* exit(1); */
-       } else {
-               GDKlog("%s", message);
-#ifdef COREDUMP
-               abort();
-#else
-               GDKexit(1);
-#endif
+               /*
+                * Real errors should be saved in the log file for post-crash
+                * inspection.
+                */
+               if (GDKexiting()) {
+                       fflush(stdout);
+                       MT_exit_thread(1);
+                       /* exit(1); */
+               } else {
+                       GDKlog("%s", message);
+       #ifdef COREDUMP
+                       abort();
+       #else
+                       GDKexit(1);
+       #endif
+               }
+       } else { // in embedded mode, we really don't want to kill our host
+               GDKfatalmsg = GDKstrdup(message);
+               longjmp(GDKfataljump, 42);
        }
-#else // in embedded mode, we really don't want to kill our host
-       GDKfatalmsg = GDKstrdup(message);
-    longjmp(GDKfataljump, 42);
-#endif
 }
 
 
diff --git a/gdk/gdk_utils.h b/gdk/gdk_utils.h
--- a/gdk/gdk_utils.h
+++ b/gdk/gdk_utils.h
@@ -98,5 +98,7 @@ gdk_export gdk_return GDKextractParentAn
 // these are used in embedded mode to jump out of GDKfatal
 gdk_export jmp_buf GDKfataljump;
 gdk_export str GDKfatalmsg;
+gdk_export bit GDKfataljumpenable;
+
 
 #endif /* _GDK_UTILS_H_ */
diff --git a/tools/embedded/embedded.c b/tools/embedded/embedded.c
--- a/tools/embedded/embedded.c
+++ b/tools/embedded/embedded.c
@@ -63,7 +63,7 @@ int monetdb_startup(char* dir, char sile
        int retval = -1;
        void* res = NULL;
        char mod_path[1000];
-
+       GDKfataljumpenable = 1;
        if(setjmp(GDKfataljump) != 0) {
                // we will get here if GDKfatal was called.
                if (GDKfatalmsg != NULL) {
@@ -125,6 +125,9 @@ int monetdb_startup(char* dir, char sile
        (*SQLinitClient_ptr)(&mal_clients[0]);
        ((backend *) mal_clients[0].sqlcontext)->mvc->session->auto_commit = 1;
        monetdb_embedded_initialized = true;
+
+       GDKfataljumpenable = 0;
+
        // sanity check, run a SQL query
        if (monetdb_query("SELECT * FROM tables;", res) != NULL) {
                monetdb_embedded_initialized = false;
@@ -147,14 +150,6 @@ char* monetdb_query(char* query, void** 
                return NULL;
        }
 
-       if(setjmp(GDKfataljump) != 0) {
-               // we will get here if GDKfatal was called.
-               if (GDKfatalmsg == NULL) {
-                       return GDKstrdup("Fatal GDK error. This is bad. ");
-               }
-               return GDKfatalmsg;
-       }
-
        while (*query == ' ' || *query == '\t') query++;
        if (strncasecmp(query, "START", 5) == 0) { // START TRANSACTION
                m->session->auto_commit = 0;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to