diff --git a/src/common/workqueue.c b/src/common/workqueue.c index 823fb51cc9..c1bd6d4e8b 100644 --- a/src/common/workqueue.c +++ b/src/common/workqueue.c @@ -363,10 +363,14 @@ threadpool_queue_update(threadpool_t *pool, static int threadpool_start_threads(threadpool_t *pool, int n) { + if (n < 0) + return -1; + tor_mutex_acquire(&pool->lock); if (pool->n_threads < n) - pool->threads = tor_realloc(pool->threads, sizeof(workerthread_t*)*n); + pool->threads = tor_reallocarray(pool->threads, + sizeof(workerthread_t*), n); while (pool->n_threads < n) { void *state = pool->new_thread_state_fn(pool->new_thread_state_arg);