Changeset: d519e5f9535d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d519e5f9535d
Modified Files:
        gdk/gdk_system.c
        tools/monetdbe/monetdbe.c
Branch: hammertime
Log Message:

Handle vanilla threads and disable embedded_lock except in monetdbe_open and 
monetdbe_close.


diffs (truncated from 322 to 300 lines):

diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c
--- a/gdk/gdk_system.c
+++ b/gdk/gdk_system.c
@@ -731,9 +731,9 @@ join_threads(void)
                                p->waiting = true;
                                pthread_mutex_unlock(&posthread_lock);
                                TRC_DEBUG(THRD, "Join thread \"%s\"\n", 
p->threadname);
-                               self->joinwait = p;
+                               if (self) self->joinwait = p;
                                pthread_join(p->tid, NULL);
-                               self->joinwait = NULL;
+                               if (self) self->joinwait = NULL;
                                rm_posthread(p);
                                waited = true;
                                pthread_mutex_lock(&posthread_lock);
@@ -758,9 +758,9 @@ join_detached_threads(void)
                                p->waiting = true;
                                pthread_mutex_unlock(&posthread_lock);
                                TRC_DEBUG(THRD, "Join thread \"%s\"\n", 
p->threadname);
-                               self->joinwait = p;
+                               if (self) self->joinwait = p;
                                pthread_join(p->tid, NULL);
-                               self->joinwait = NULL;
+                               if (self) self->joinwait = NULL;
                                rm_posthread(p);
                                waited = true;
                                pthread_mutex_lock(&posthread_lock);
@@ -913,9 +913,9 @@ MT_join_thread(MT_Id t)
                return -1;
        TRC_DEBUG(THRD, "Join thread \"%s\"\n", p->threadname);
        struct posthread *self = pthread_getspecific(threadkey);
-       self->joinwait = p;
+       if (self) self->joinwait = p;
        ret = pthread_join(p->tid, NULL);
-       self->joinwait = NULL;
+       if (self) self->joinwait = NULL;
        if (ret != 0) {
                GDKsyserr(ret, "Joining thread failed");
                return -1;
@@ -927,8 +927,7 @@ MT_join_thread(MT_Id t)
 int
 MT_kill_thread(MT_Id t)
 {
-       assert(t > 1);
-#ifdef HAVE_PTHREAD_KILL
+       #ifdef HAVE_PTHREAD_KILL
        struct posthread *p;
 
        join_threads();
diff --git a/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c
--- a/tools/monetdbe/monetdbe.c
+++ b/tools/monetdbe/monetdbe.c
@@ -247,15 +247,6 @@ monetdbe_query_internal(monetdbe_databas
        bstream *old_bstream = NULL;
        stream *fdout = c->fdout;
 
-       bool is_external_thread = (strcmp(MT_thread_getname(), UNKNOWN_THREAD) 
== 0);
-
-       if (is_external_thread) {
-               char thread_name[MT_NAME_LEN];
-               sprintf(thread_name, "external_%d", c->idx);
-
-               MT_declare_external_thread(thread_name);
-       }
-
        if (result)
                *result = NULL;
 
@@ -372,10 +363,6 @@ cleanup:
 
        char* msg = commit_action(m, mdbe, result, res_internal);
 
-       if (is_external_thread) {
-               MT_undeclare_external_thread();
-       }
-
        return msg;
 }
 
@@ -443,7 +430,7 @@ cleanup:
 static void
 monetdbe_shutdown_internal(void) // Call this function always inside the 
embedded_lock
 {
-       if (monetdbe_embedded_initialized) {
+       if (monetdbe_embedded_initialized && (open_dbs == 0)) {
             malEmbeddedReset();
                monetdbe_embedded_initialized = false;
                if (monetdbe_embedded_url)
@@ -644,12 +631,12 @@ monetdbe_dump_database(monetdbe_database
                return NULL;
 
        monetdbe_database_internal *mdbe = (monetdbe_database_internal*)dbhdl;
-       MT_lock_set(&embedded_lock);
+       
        if ((mdbe->msg = validate_database_handle(mdbe, 
"embedded.monetdbe_dump_database")) != MAL_SUCCEED) {
-               MT_lock_unset(&embedded_lock);
+               
                return mdbe->msg;
        }
-       MT_lock_unset(&embedded_lock);
+       
        struct MapiStruct mid = { .mdbe = mdbe };
 
        /* open file stream */
@@ -673,12 +660,12 @@ monetdbe_dump_table(monetdbe_database db
                return NULL;
 
        monetdbe_database_internal *mdbe = (monetdbe_database_internal*)dbhdl;
-       MT_lock_set(&embedded_lock);
+       
        if ((mdbe->msg = validate_database_handle(mdbe, 
"embedded.monetdbe_dump_table")) != MAL_SUCCEED) {
-               MT_lock_unset(&embedded_lock);
+               
                return mdbe->msg;
        }
-       MT_lock_unset(&embedded_lock);
+       
        struct MapiStruct mid = { .mdbe = mdbe };
 
        /* open file stream */
@@ -702,9 +689,9 @@ monetdbe_get_autocommit(monetdbe_databas
                return NULL;
 
        monetdbe_database_internal *mdbe = (monetdbe_database_internal*)dbhdl;
-       MT_lock_set(&embedded_lock);
+       
        if ((mdbe->msg = validate_database_handle(mdbe, 
"monetdbe.monetdbe_get_autocommit")) != MAL_SUCCEED) {
-               MT_lock_unset(&embedded_lock);
+               
                return mdbe->msg;
        }
 
@@ -714,7 +701,7 @@ monetdbe_get_autocommit(monetdbe_databas
                mvc *m = ((backend *) mdbe->c->sqlcontext)->mvc;
                *result = m->session->auto_commit;
        }
-       MT_lock_unset(&embedded_lock);
+       
        return mdbe->msg;
 }
 
@@ -725,9 +712,9 @@ monetdbe_set_autocommit(monetdbe_databas
                return NULL;
 
        monetdbe_database_internal *mdbe = (monetdbe_database_internal*)dbhdl;
-       MT_lock_set(&embedded_lock);
+       
        if (!validate_database_handle_noerror(mdbe)) {
-               MT_lock_unset(&embedded_lock);
+               
                return 0;
        }
 
@@ -743,7 +730,7 @@ monetdbe_set_autocommit(monetdbe_databas
                        mdbe->msg = mvc_rollback(m, 0, NULL, true);
                }
        }
-       MT_lock_unset(&embedded_lock);
+       
        return mdbe->msg;
 }
 
@@ -753,9 +740,9 @@ monetdbe_in_transaction(monetdbe_databas
        if (!dbhdl)
                return 0;
        monetdbe_database_internal *mdbe = (monetdbe_database_internal*)dbhdl;
-       MT_lock_set(&embedded_lock);
+       
        if (!validate_database_handle_noerror(mdbe)) {
-               MT_lock_unset(&embedded_lock);
+               
                return 0;
        }
 
@@ -764,7 +751,7 @@ monetdbe_in_transaction(monetdbe_databas
 
        if (m->session->tr)
                result = m->session->tr->active;
-       MT_lock_unset(&embedded_lock);
+       
        return result;
 }
 
@@ -774,9 +761,9 @@ monetdbe_query(monetdbe_database dbhdl, 
        if (!dbhdl)
                return NULL;
        monetdbe_database_internal *mdbe = (monetdbe_database_internal*)dbhdl;
-       MT_lock_set(&embedded_lock);
+       
        mdbe->msg = monetdbe_query_internal(mdbe, query, result, affected_rows, 
NULL, 'S');
-       MT_lock_unset(&embedded_lock);
+       
        return mdbe->msg;
 }
 
@@ -788,7 +775,7 @@ monetdbe_prepare(monetdbe_database dbhdl
        monetdbe_database_internal *mdbe = (monetdbe_database_internal*)dbhdl;
 
        int prepare_id = 0;
-       MT_lock_set(&embedded_lock);
+       
        if (!stmt)
                mdbe->msg = createException(MAL, "monetdbe.monetdbe_prepare", 
"Parameter stmt is NULL");
        else {
@@ -828,7 +815,7 @@ monetdbe_prepare(monetdbe_database dbhdl
                else if (stmt_internal)
                        GDKfree(stmt_internal);
        }
-       MT_lock_unset(&embedded_lock);
+       
        return mdbe->msg;
 }
 
@@ -926,13 +913,13 @@ monetdbe_cleanup_result(monetdbe_databas
        monetdbe_database_internal *mdbe = (monetdbe_database_internal*)dbhdl;
        monetdbe_result_internal* res = (monetdbe_result_internal *) result;
 
-       MT_lock_set(&embedded_lock);
+       
        if (!result) {
                mdbe->msg = createException(MAL, 
"monetdbe.monetdbe_cleanup_result_internal", "Parameter result is NULL");
        } else {
                mdbe->msg = monetdbe_cleanup_result_internal(mdbe, res);
        }
-       MT_lock_unset(&embedded_lock);
+       
        return mdbe->msg;
 }
 
@@ -943,9 +930,9 @@ monetdbe_get_table(monetdbe_database dbh
        mvc *m;
        sql_schema *s;
 
-       MT_lock_set(&embedded_lock);
+       
        if ((mdbe->msg = validate_database_handle(mdbe, 
"monetdbe.monetdbe_get_table")) != MAL_SUCCEED) {
-               MT_lock_unset(&embedded_lock);
+               
                return mdbe->msg;
        }
 
@@ -972,7 +959,7 @@ monetdbe_get_table(monetdbe_database dbh
 
 cleanup:
        mdbe->msg = commit_action(m, mdbe, NULL, NULL);
-       MT_lock_unset(&embedded_lock);
+       
        return mdbe->msg;
 }
 
@@ -987,9 +974,9 @@ monetdbe_get_columns(monetdbe_database d
        int columns;
        node *n;
 
-       MT_lock_set(&embedded_lock);
+       
        if ((mdbe->msg = validate_database_handle(mdbe, 
"monetdbe.monetdbe_get_columns")) != MAL_SUCCEED) {
-               MT_lock_unset(&embedded_lock);
+               
                return mdbe->msg;
        }
 
@@ -1051,7 +1038,7 @@ monetdbe_get_columns(monetdbe_database d
 
 cleanup:
        mdbe->msg = commit_action(m, mdbe, NULL, NULL);
-       MT_lock_unset(&embedded_lock);
+       
        return mdbe->msg;
 }
 
@@ -1126,9 +1113,9 @@ monetdbe_append(monetdbe_database dbhdl,
        size_t i, cnt;
        node *n;
 
-       MT_lock_set(&embedded_lock);
+       
        if ((mdbe->msg = validate_database_handle(mdbe, 
"monetdbe.monetdbe_append")) != MAL_SUCCEED) {
-               MT_lock_unset(&embedded_lock);
+               
                return mdbe->msg;
        }
 
@@ -1279,7 +1266,7 @@ monetdbe_append(monetdbe_database dbhdl,
        }
 cleanup:
        mdbe->msg = commit_action(m, mdbe, NULL, NULL);
-       MT_lock_unset(&embedded_lock);
+       
        return mdbe->msg;
 }
 
@@ -1326,9 +1313,9 @@ monetdbe_result_fetch(monetdbe_result* m
        monetdbe_database_internal *mdbe = result->mdbe;
        Client c = mdbe->c;
 
-       MT_lock_set(&embedded_lock);
+       
        if ((mdbe->msg = validate_database_handle(mdbe, 
"monetdbe.monetdbe_result_fetch")) != MAL_SUCCEED) {
-               MT_lock_unset(&embedded_lock);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to