Changeset: 87faa75fd59f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/87faa75fd59f
Modified Files:
        clients/Tests/exports.stable.out
        gdk/gdk.h
        gdk/gdk_system.c
        gdk/gdk_system.h
        gdk/gdk_utils.c
        monetdb5/mal/mal_client.c
        monetdb5/mal/mal_dataflow.c
Branch: default
Log Message:

Thread cleanup: remote THRdata, change GDKstd{in,out}, GDKerrbuf definitions.


diffs (284 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -276,6 +276,7 @@ bit GDKfataljumpenable;
 str GDKfatalmsg;
 char *GDKfilepath(int farmid, const char *dir, const char *nme, const char 
*ext);
 void GDKfree(void *blk);
+char *GDKgetbuf(void);
 unsigned GDKgetdebug(void);
 const char *GDKgetenv(const char *name);
 int GDKgetenv_int(const char *name, int def);
@@ -306,9 +307,12 @@ void GDKqsort(void *restrict h, void *re
 void *GDKrealloc(void *pold, size_t size) __attribute__((__alloc_size__(2))) 
__attribute__((__warn_unused_result__));
 gdk_return GDKrebuild_segment_tree(oid ncount, oid data_size, BAT *st, void 
**segment_tree, oid **levels_offset, oid *nlevels);
 void GDKreset(int status);
+void GDKsetbuf(char *);
 void GDKsetdebug(unsigned debug);
 gdk_return GDKsetenv(const char *name, const char *value);
 void GDKsetmallocsuccesscount(lng count);
+stream *GDKstdin;
+stream *GDKstdout;
 ssize_t GDKstrFromStr(unsigned char *restrict dst, const unsigned char 
*restrict src, ssize_t len, char quote);
 str GDKstrdup(const char *s) __attribute__((__malloc__)) 
__attribute__((__warn_unused_result__));
 str GDKstrndup(const char *s, size_t n) __attribute__((__malloc__)) 
__attribute__((__warn_unused_result__));
@@ -402,12 +406,9 @@ gdk_return STRMPcreate(BAT *b, BAT *s);
 void STRMPdestroy(BAT *b);
 BAT *STRMPfilter(BAT *b, BAT *s, const char *q, const bool keep_nils);
 MT_Id THRcreate(void (*f)(void *), void *arg, enum MT_thr_detach d, const char 
*name);
-void *THRdata[THREADDATA];
 void THRdel(Thread t);
-void *THRgetdata(int);
 int THRgettid(void);
 bool THRhighwater(void);
-void THRsetdata(int, void *);
 gdk_return TMsubcommit(BAT *bl) __attribute__((__warn_unused_result__));
 gdk_return TMsubcommit_list(bat *restrict subcommit, BUN *restrict sizes, int 
cnt, lng logno, lng transid) __attribute__((__warn_unused_result__));
 void VALclear(ValPtr v);
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1991,27 +1991,17 @@ typedef struct threadStruct {
        ATOMIC_TYPE pid;        /* thread id, 0 = unallocated */
        bat freebats;           /* linked list of free bats */
        uint32_t nfreebats;     /* number of free bats in .freebats */
-       void *data[THREADDATA];
 } *Thread;
 
 
 gdk_export int THRgettid(void);
 gdk_export MT_Id THRcreate(void (*f) (void *), void *arg, enum MT_thr_detach 
d, const char *name);
 gdk_export void THRdel(Thread t);
-gdk_export void THRsetdata(int, void *);
-gdk_export void *THRgetdata(int);
-gdk_export bool THRhighwater(void);
-
-gdk_export void *THRdata[THREADDATA];
 
-#define GDKstdout      ((stream*)THRdata[0])
-#define GDKstdin       ((stream*)THRdata[1])
+gdk_export stream *GDKstdout;
+gdk_export stream *GDKstdin;
 
-#define GDKerrbuf      ((char*)THRgetdata(2))
-#define GDKsetbuf(x)   THRsetdata(2,(void *)(x))
-
-#define THRget_errbuf(t)       ((char*)t->data[2])
-#define THRset_errbuf(t,b)     (t->data[2] = b)
+#define GDKerrbuf      (GDKgetbuf())
 
 static inline bat
 BBPcheck(bat x)
diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c
--- a/gdk/gdk_system.c
+++ b/gdk/gdk_system.c
@@ -206,6 +206,7 @@ static struct mtthread {
 #endif
        MT_Id tid;
        uintptr_t sp;
+       char *errbuf;
 } *mtthreads = NULL;
 struct mtthread mainthread = {
        .threadname = "main thread",
@@ -434,6 +435,29 @@ MT_thread_getname(void)
 }
 
 void
+GDKsetbuf(char *errbuf)
+{
+       struct mtthread *self;
+
+       self = thread_self();
+       if (self == NULL)
+               self = &mainthread;
+       assert(errbuf == NULL || self->errbuf == NULL);
+       self->errbuf = errbuf;
+}
+
+char *
+GDKgetbuf(void)
+{
+       struct mtthread *self;
+
+       self = thread_self();
+       if (self == NULL)
+               self = &mainthread;
+       return self->errbuf;
+}
+
+void
 MT_thread_setdata(void *data)
 {
        if (!thread_initialized)
diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h
--- a/gdk/gdk_system.h
+++ b/gdk/gdk_system.h
@@ -171,6 +171,7 @@ typedef struct QryCtx {
        ATOMIC_BASE_TYPE maxmem;
 } QryCtx;
 
+gdk_export bool THRhighwater(void);
 gdk_export bool MT_thread_init(void);
 gdk_export int MT_create_thread(MT_Id *t, void (*function) (void *),
                                void *arg, enum MT_thr_detach d,
@@ -185,6 +186,8 @@ gdk_export MT_Id MT_getpid(void);
 gdk_export int MT_join_thread(MT_Id t);
 gdk_export QryCtx *MT_thread_get_qry_ctx(void);
 gdk_export void MT_thread_set_qry_ctx(QryCtx *ctx);
+gdk_export void GDKsetbuf(char *);
+gdk_export char *GDKgetbuf(void);
 
 #if SIZEOF_VOID_P == 4
 /* "limited" stack size on 32-bit systems */
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -1344,10 +1344,11 @@ GDKreset(int status)
 
                GDKnr_threads = 0;
                ATOMIC_SET(&GDKnrofthreads, 0);
-               close_stream((stream *) THRdata[0]);
-               close_stream((stream *) THRdata[1]);
+               close_stream(GDKstdout);
+               close_stream(GDKstdin);
+               GDKstdout = NULL;
+               GDKstdin = NULL;
 
-               memset(THRdata, 0, sizeof(THRdata));
                gdk_bbp_reset();
        }
        ATOMunknown_clean();
@@ -1601,7 +1602,8 @@ GDKms(void)
  * descriptors are the same as for the server and should be
  * subsequently reset.
  */
-void *THRdata[THREADDATA] = { 0 };
+stream *GDKstdout;
+stream *GDKstdin;
 
 static inline Thread
 GDK_find_self(void)
@@ -1616,8 +1618,6 @@ THRnew(MT_Id pid)
                ATOMIC_BASE_TYPE npid = 0;
                if (ATOMIC_CAS(&s->pid, &npid, pid)) {
                        /* successfully allocated, fill in rest */
-                       s->data[0] = THRdata[0];
-                       s->data[1] = THRdata[1];
                        s->freebats = 0;
                        s->nfreebats = 0;
                        TRC_DEBUG(PAR, "%d %zu\n",
@@ -1707,8 +1707,6 @@ THRdel(Thread t)
                  (size_t) ATOMIC_GET(&t->pid),
                  (int) ATOMIC_GET(&GDKnrofthreads));
 
-       for (int i = 0; i < THREADDATA; i++)
-               t->data[i] = NULL;
        ATOMIC_SET(&t->pid, 0); /* deallocate */
        ATOMIC_DEC(&GDKnrofthreads);
 }
@@ -1724,14 +1722,14 @@ THRinit(void)
        Thread s;
        static bool first = true;
 
-       if ((THRdata[0] = (void *) stdout_wastream()) == NULL) {
+       if ((GDKstdout = stdout_wastream()) == NULL) {
                TRC_CRITICAL(GDK, "malloc for stdout failed\n");
                return -1;
        }
-       if ((THRdata[1] = (void *) stdin_rastream()) == NULL) {
+       if ((GDKstdin = stdin_rastream()) == NULL) {
                TRC_CRITICAL(GDK, "malloc for stdin failed\n");
-               mnstr_destroy(THRdata[0]);
-               THRdata[0] = NULL;
+               mnstr_destroy(GDKstdout);
+               GDKstdout = NULL;
                return -1;
        }
        if (first) {
@@ -1743,39 +1741,16 @@ THRinit(void)
        }
        if ((s = THRnew(MT_getpid())) == NULL) {
                TRC_CRITICAL(GDK, "THRnew failed\n");
-               mnstr_destroy(THRdata[0]);
-               THRdata[0] = NULL;
-               mnstr_destroy(THRdata[1]);
-               THRdata[1] = NULL;
+               mnstr_destroy(GDKstdout);
+               GDKstdout = NULL;
+               mnstr_destroy(GDKstdin);
+               GDKstdin = NULL;
                return -1;
        }
        MT_thread_setdata(s);
        return 0;
 }
 
-void
-THRsetdata(int n, ptr val)
-{
-       Thread s;
-
-       s = GDK_find_self();
-       if (s) {
-               assert(val == NULL || s->data[n] == NULL);
-               s->data[n] = val;
-       }
-}
-
-void *
-THRgetdata(int n)
-{
-       Thread s;
-       void *d;
-
-       s = GDK_find_self();
-       d = s ? s->data[n] : THRdata[n];
-       return d;
-}
-
 int
 THRgettid(void)
 {
diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -315,14 +315,10 @@ MCinitClient(oid user, bstream *fin, str
 int
 MCinitClientThread(Client c)
 {
-       Thread t = MT_thread_getdata();
-
        /*
         * The GDK thread administration should be set to reflect use of
         * the proper IO descriptors.
         */
-       t->data[1] = c->fdin;
-       t->data[0] = c->fdout;
        c->mythread = MT_thread_getname();
        c->errbuf = GDKerrbuf;
        if (c->errbuf == NULL) {
@@ -383,10 +379,10 @@ MCcloseClient(Client c)
        if (c->errbuf) {
                /* no client threads in embedded mode */
                //if (!GDKembedded())
-               GDKsetbuf(0);
+               GDKsetbuf(NULL);
                if (c->father == NULL)
                        GDKfree(c->errbuf);
-               c->errbuf = 0;
+               c->errbuf = NULL;
        }
        if (c->usermodule)
                freeModule(c->usermodule);
diff --git a/monetdb5/mal/mal_dataflow.c b/monetdb5/mal/mal_dataflow.c
--- a/monetdb5/mal/mal_dataflow.c
+++ b/monetdb5/mal/mal_dataflow.c
@@ -455,7 +455,7 @@ DFLOWworker(void *T)
                assert(t->flag == WAITING);
        }
        GDKfree(GDKerrbuf);
-       GDKsetbuf(0);
+       GDKsetbuf(NULL);
 }
 
 /*
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to