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