sna: Reorder writes during thread task decoupling
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 28 Feb 2014 08:47:21 +0000 (08:47 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Fri, 28 Feb 2014 08:50:06 +0000 (08:50 +0000)
So that the lockless reads do not see the task complete signal prior to
marking the task as successful. Otherwise, we falsely detect that the
thread trapped a signal and kill them all.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
src/sna/sna_threads.c

index 089d8ab..52fa405 100644 (file)
@@ -67,8 +67,8 @@ static void *__run__(void *arg)
                t->func(t->arg);
 
                pthread_mutex_lock(&t->mutex);
-               t->func = NULL;
                t->arg = NULL;
+               t->func = NULL;
                pthread_cond_signal(&t->cond);
        }
        pthread_mutex_unlock(&t->mutex);
@@ -190,8 +190,8 @@ void sna_threads_trap(int sig)
        ERR(("%s: thread[%d] caught signal %d\n", __func__, n, sig));
 
        pthread_mutex_lock(&threads[n].mutex);
-       threads[n].func = NULL;
        threads[n].arg = (void *)(intptr_t)sig;
+       threads[n].func = NULL;
        pthread_cond_signal(&threads[n].cond);
        pthread_mutex_unlock(&threads[n].mutex);