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

Reply via email to