Changeset: 6a5e03924402 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/6a5e03924402 Modified Files: gdk/gdk.h gdk/gdk_utils.c tools/monetdbe/monetdbe.c Branch: default Log Message:
user created threads need to register (THRnew) and deregister (THRdel) used by monetdbe open/close. diffs (64 lines): diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -2000,6 +2000,7 @@ typedef struct threadStruct { gdk_export int THRgettid(void); gdk_export Thread THRget(int tid); gdk_export MT_Id THRcreate(void (*f) (void *), void *arg, enum MT_thr_detach d, const char *name); +gdk_export Thread THRnew(const char *name, MT_Id pid); gdk_export void THRdel(Thread t); gdk_export void THRsetdata(int, void *); gdk_export void *THRgetdata(int); diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c --- a/gdk/gdk_utils.c +++ b/gdk/gdk_utils.c @@ -1650,7 +1650,7 @@ GDK_find_self(void) return (Thread) MT_thread_getdata(); } -static Thread +Thread THRnew(const char *name, MT_Id pid) { for (Thread s = GDKthreads; s < GDKthreads + THREADS; s++) { diff --git a/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c --- a/tools/monetdbe/monetdbe.c +++ b/tools/monetdbe/monetdbe.c @@ -89,6 +89,7 @@ embedded_type(int t) { typedef struct { Client c; char *msg; + int registered_thread; /* 1 = registered in monetdbe_open, 2 = done by GDK (also deregister done there) */ monetdbe_data_blob blob_null; monetdbe_data_date date_null; monetdbe_data_time time_null; @@ -543,6 +544,10 @@ monetdbe_open_internal(monetdbe_database set_error(mdbe, createException(MAL, "monetdbe.monetdbe_open_internal", "Embedded MonetDB is not started")); goto cleanup; } + if (!mdbe->registered_thread) { + MT_thread_setdata(THRnew( "monetdbe client thread", 1)); + mdbe->registered_thread = 1; + } mdbe->c = MCinitClient((oid) 0, 0, 0); if (!MCvalid(mdbe->c)) { set_error(mdbe, createException(MAL, "monetdbe.monetdbe_open_internal", "Failed to initialize client")); @@ -916,6 +921,7 @@ monetdbe_open(monetdbe_database *dbhdl, */ assert(!is_remote||url==NULL); monetdbe_startup(mdbe, url, opts); + mdbe->registered_thread = 2; } else if (!is_remote && !urls_matches(monetdbe_embedded_url, url)) { set_error(mdbe, createException(MAL, "monetdbe.monetdbe_open", "monetdbe_open currently only one active database is supported")); } @@ -947,6 +953,10 @@ monetdbe_close(monetdbe_database dbhdl) err = (monetdbe_close_internal(mdbe) || err); + if (mdbe->registered_thread == 1) { + THRdel( MT_thread_getdata() ); + mdbe->registered_thread = 0; + } if (!open_dbs) monetdbe_shutdown_internal(); MT_lock_unset(&embedded_lock); _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org