Mesa (master): util/queue: hold a lock when reading num_threads in util_queue_finish

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Apr 1 16:43:55 UTC 2019


Module: Mesa
Branch: master
Commit: b7317b6ce0943076a786e7151c561e22412f892c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b7317b6ce0943076a786e7151c561e22412f892c

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Mon Aug  6 20:34:24 2018 -0400

util/queue: hold a lock when reading num_threads in util_queue_finish

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

---

 src/util/u_queue.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/util/u_queue.c b/src/util/u_queue.c
index cfd2a08e3c8..5e0c1095569 100644
--- a/src/util/u_queue.c
+++ b/src/util/u_queue.c
@@ -592,15 +592,15 @@ void
 util_queue_finish(struct util_queue *queue)
 {
    util_barrier barrier;
-   struct util_queue_fence *fences = malloc(queue->num_threads * sizeof(*fences));
-
-   util_barrier_init(&barrier, queue->num_threads);
+   struct util_queue_fence *fences;
 
    /* If 2 threads were adding jobs for 2 different barries at the same time,
     * a deadlock would happen, because 1 barrier requires that all threads
     * wait for it exclusively.
     */
    mtx_lock(&queue->finish_lock);
+   fences = malloc(queue->num_threads * sizeof(*fences));
+   util_barrier_init(&barrier, queue->num_threads);
 
    for (unsigned i = 0; i < queue->num_threads; ++i) {
       util_queue_fence_init(&fences[i]);




More information about the mesa-commit mailing list