mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 11:00:11 +01:00
util/u_queue: fix a use-before-initialization race for queue->threads
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
This commit is contained in:
parent
19f6cc3cba
commit
e93a141f64
2 changed files with 14 additions and 17 deletions
|
|
@ -147,21 +147,6 @@ util_queue_thread_func(void *input)
|
|||
u_thread_setname(name);
|
||||
}
|
||||
|
||||
if (queue->flags & UTIL_QUEUE_INIT_USE_MINIMUM_PRIORITY) {
|
||||
#if defined(__linux__)
|
||||
struct sched_param sched_param = {0};
|
||||
|
||||
/* The nice() function can only set a maximum of 19.
|
||||
* SCHED_IDLE is the same as nice = 20.
|
||||
*
|
||||
* Note that Linux only allows decreasing the priority. The original
|
||||
* priority can't be restored.
|
||||
*/
|
||||
pthread_setschedparam(queue->threads[thread_index], SCHED_IDLE,
|
||||
&sched_param);
|
||||
#endif
|
||||
}
|
||||
|
||||
while (1) {
|
||||
struct util_queue_job job;
|
||||
|
||||
|
|
@ -220,7 +205,6 @@ util_queue_init(struct util_queue *queue,
|
|||
memset(queue, 0, sizeof(*queue));
|
||||
queue->name = name;
|
||||
queue->num_threads = num_threads;
|
||||
queue->flags = flags;
|
||||
queue->max_jobs = max_jobs;
|
||||
|
||||
queue->jobs = (struct util_queue_job*)
|
||||
|
|
@ -259,6 +243,20 @@ util_queue_init(struct util_queue *queue,
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (flags & UTIL_QUEUE_INIT_USE_MINIMUM_PRIORITY) {
|
||||
#if defined(__linux__)
|
||||
struct sched_param sched_param = {0};
|
||||
|
||||
/* The nice() function can only set a maximum of 19.
|
||||
* SCHED_IDLE is the same as nice = 20.
|
||||
*
|
||||
* Note that Linux only allows decreasing the priority. The original
|
||||
* priority can't be restored.
|
||||
*/
|
||||
pthread_setschedparam(queue->threads[i], SCHED_IDLE, &sched_param);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
add_to_atexit_list(queue);
|
||||
|
|
|
|||
|
|
@ -71,7 +71,6 @@ struct util_queue {
|
|||
thrd_t *threads;
|
||||
int num_queued;
|
||||
unsigned num_threads;
|
||||
unsigned flags;
|
||||
int kill_threads;
|
||||
int max_jobs;
|
||||
int write_idx, read_idx; /* ring buffer pointers */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue