mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-11-10 07:20:02 +00:00
virthreadpool: create threads from the newly expanded workers
when the thread pool is dynamically expanded, threads should not be created from the existing workers; they should be created from the newly expanded workers Signed-off-by: Wei Gong <gongwei833x@gmail.com> Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
eb87d146ea
commit
0bb33164d0
@ -184,7 +184,7 @@ virThreadPoolExpand(virThreadPool *pool, size_t gain, bool priority)
|
|||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
struct virThreadPoolWorkerData *data = NULL;
|
struct virThreadPoolWorkerData *data = NULL;
|
||||||
|
|
||||||
VIR_EXPAND_N(*workers, *curWorkers, gain);
|
VIR_REALLOC_N(*workers, *curWorkers + gain);
|
||||||
|
|
||||||
for (i = 0; i < gain; i++) {
|
for (i = 0; i < gain; i++) {
|
||||||
g_autofree char *name = NULL;
|
g_autofree char *name = NULL;
|
||||||
@ -199,7 +199,7 @@ virThreadPoolExpand(virThreadPool *pool, size_t gain, bool priority)
|
|||||||
else
|
else
|
||||||
name = g_strdup(pool->jobName);
|
name = g_strdup(pool->jobName);
|
||||||
|
|
||||||
if (virThreadCreateFull(&(*workers)[i],
|
if (virThreadCreateFull(&(*workers)[*curWorkers],
|
||||||
false,
|
false,
|
||||||
virThreadPoolWorker,
|
virThreadPoolWorker,
|
||||||
name,
|
name,
|
||||||
@ -207,15 +207,13 @@ virThreadPoolExpand(virThreadPool *pool, size_t gain, bool priority)
|
|||||||
data) < 0) {
|
data) < 0) {
|
||||||
VIR_FREE(data);
|
VIR_FREE(data);
|
||||||
virReportSystemError(errno, "%s", _("Failed to create thread"));
|
virReportSystemError(errno, "%s", _("Failed to create thread"));
|
||||||
goto error;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
(*curWorkers)++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error:
|
|
||||||
*curWorkers -= gain - i;
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virThreadPool *
|
virThreadPool *
|
||||||
|
Loading…
Reference in New Issue
Block a user