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:
Wei Gong 2024-03-18 21:31:14 +08:00 committed by Michal Privoznik
parent eb87d146ea
commit 0bb33164d0

View File

@ -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 *