[Mesa-dev] [PATCH 1/2] gallium/u_queue: fix a crash with atexit handlers
Grazvydas Ignotas
notasas at gmail.com
Sun Feb 26 00:44:06 UTC 2017
Commit 4aea8fe ("gallium/u_queue: fix random crashes when the app calls
exit()") added a atexit handler which calls
util_queue_killall_and_wait() for each queue to stop the threads.
However the app is also free to use atexit handlers to clean up things,
leading to util_queue_destroy() call which will also call
util_queue_killall_and_wait() for the same queue again, causing threads
being joined twice, and that is undefined. This happens with libglut,
for example. A simple fix is to just set num_threads to 0 as there are
no more valid threads after util_queue_killall_and_wait() returns.
Fixes: 4aea8fe "gallium/u_queue: fix random crashes when the app calls exit()"
Signed-off-by: Grazvydas Ignotas <notasas at gmail.com>
---
no commit access
src/gallium/auxiliary/util/u_queue.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/gallium/auxiliary/util/u_queue.c b/src/gallium/auxiliary/util/u_queue.c
index 386dc4a..c51b621 100644
--- a/src/gallium/auxiliary/util/u_queue.c
+++ b/src/gallium/auxiliary/util/u_queue.c
@@ -272,6 +272,7 @@ util_queue_killall_and_wait(struct util_queue *queue)
for (i = 0; i < queue->num_threads; i++)
pipe_thread_wait(queue->threads[i]);
+ queue->num_threads = 0;
}
void
--
2.7.4
More information about the mesa-dev
mailing list