libvirt/src/util/virthreadpool.h
Michal Privoznik 0c8f1aeddf virthreadpool: Allow setting identity for workers
In some cases the worker func running inside the pool may rely on
virIdentity. While worker func could check for identity and set
one it is not optimal - it may not have access to the identity of
the thread creating the pool and thus would have to call
virIdentityGetSystem(). Allow passing identity when creating the
pool.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
2021-10-27 17:11:29 +02:00

60 lines
2.3 KiB
C

/*
* virthreadpool.h: a generic thread pool implementation
*
* Copyright (C) 2010 Hu Tao
* Copyright (C) 2010 Daniel P. Berrange
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "internal.h"
#include "viridentity.h"
typedef struct _virThreadPool virThreadPool;
typedef void (*virThreadPoolJobFunc)(void *jobdata, void *opaque);
virThreadPool *virThreadPoolNewFull(size_t minWorkers,
size_t maxWorkers,
size_t prioWorkers,
virThreadPoolJobFunc func,
const char *name,
virIdentity *identity,
void *opaque) ATTRIBUTE_NONNULL(4);
size_t virThreadPoolGetMinWorkers(virThreadPool *pool);
size_t virThreadPoolGetMaxWorkers(virThreadPool *pool);
size_t virThreadPoolGetPriorityWorkers(virThreadPool *pool);
size_t virThreadPoolGetCurrentWorkers(virThreadPool *pool);
size_t virThreadPoolGetFreeWorkers(virThreadPool *pool);
size_t virThreadPoolGetJobQueueDepth(virThreadPool *pool);
void virThreadPoolFree(virThreadPool *pool);
int virThreadPoolSendJob(virThreadPool *pool,
unsigned int priority,
void *jobdata) ATTRIBUTE_NONNULL(1)
G_GNUC_WARN_UNUSED_RESULT;
int virThreadPoolSetParameters(virThreadPool *pool,
long long int minWorkers,
long long int maxWorkers,
long long int prioWorkers);
void virThreadPoolStop(virThreadPool *pool);
void virThreadPoolDrain(virThreadPool *pool);