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

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
Marek Olšák 2018-08-06 20:34:24 -04:00
parent bb111559f2
commit b7317b6ce0

View file

@ -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]);