mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-08-29 01:50:11 +03:00
Threadpool: Initialize new dynamic workers
Although we were initializing worker threads during pool creating, we missed this during virThreadPoolSendJob. This bug led to segmenation fault as worker thread free() given argument.
This commit is contained in:
@ -286,6 +286,7 @@ int virThreadPoolSendJob(virThreadPoolPtr pool,
|
||||
void *jobData)
|
||||
{
|
||||
virThreadPoolJobPtr job;
|
||||
struct virThreadPoolWorkerData *data = NULL;
|
||||
|
||||
virMutexLock(&pool->mutex);
|
||||
if (pool->quit)
|
||||
@ -298,10 +299,20 @@ int virThreadPoolSendJob(virThreadPoolPtr pool,
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (VIR_ALLOC(data) < 0) {
|
||||
pool->nWorkers--;
|
||||
virReportOOMError();
|
||||
goto error;
|
||||
}
|
||||
|
||||
data->pool = pool;
|
||||
data->cond = &pool->cond;
|
||||
|
||||
if (virThreadCreate(&pool->workers[pool->nWorkers - 1],
|
||||
true,
|
||||
virThreadPoolWorker,
|
||||
pool) < 0) {
|
||||
data) < 0) {
|
||||
VIR_FREE(data);
|
||||
pool->nWorkers--;
|
||||
goto error;
|
||||
}
|
||||
|
Reference in New Issue
Block a user