Changeset: eaadb9ab037d for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=eaadb9ab037d
Modified Files:
        gdk/gdk_system.c
Branch: Oct2014
Log Message:

free thread data after last use, fixes bug 3595.


diffs (44 lines):

diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c
--- a/gdk/gdk_system.c
+++ b/gdk/gdk_system.c
@@ -495,7 +495,6 @@ rm_posthread(struct posthread *p, int lo
                *pp = p->next;
        if (lock)
                pthread_mutex_unlock(&posthread_lock);
-       free(p);
 }
 
 static void
@@ -512,20 +511,22 @@ thread_starter(void *arg)
 static void
 join_threads(void)
 {
-       struct posthread *p;
+       struct posthread *p, *n = NULL;
        int waited;
        pthread_t tid;
 
        pthread_mutex_lock(&posthread_lock);
        do {
                waited = 0;
-               for (p = posthreads; p; p = p->next) {
+               for (p = posthreads; p; p = n) {
+                       n = p->next;
                        if (p->exited) {
                                tid = p->tid;
                                rm_posthread(p, 0);
                                pthread_mutex_unlock(&posthread_lock);
                                pthread_join(tid, NULL);
                                pthread_mutex_lock(&posthread_lock);
+                               free(p);
                                waited = 1;
                                break;
                        }
@@ -578,6 +579,7 @@ MT_create_thread(MT_Id *t, void (*f) (vo
 #endif
        } else if (p) {
                rm_posthread(p, 1);
+               free(p);
        }
 #ifdef HAVE_PTHREAD_SIGMASK
        MT_thread_sigmask(&orig_mask, NULL);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to