1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

virThread: Set thread job

Automatically assign a job to every thread created by virThreadCreate.
The name of the virThreadFunc function passed to virThreadCreate is used
as the job or worker name in case no name is explicitly passed.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
Jiri Denemark 2015-03-20 17:43:55 +01:00
parent 23d0c979f7
commit 55ebc93a08
3 changed files with 31 additions and 9 deletions

View File

@ -2181,7 +2181,7 @@ virRWLockRead;
virRWLockUnlock;
virRWLockWrite;
virThreadCancel;
virThreadCreate;
virThreadCreateFull;
virThreadID;
virThreadInitialize;
virThreadIsSelf;

View File

@ -30,6 +30,7 @@
#endif
#include "viralloc.h"
#include "virthreadjob.h"
/* Nothing special required for pthreads */
@ -184,6 +185,8 @@ void virCondBroadcast(virCondPtr c)
struct virThreadArgs {
virThreadFunc func;
const char *funcName;
bool worker;
void *opaque;
};
@ -194,14 +197,26 @@ static void *virThreadHelper(void *data)
/* Free args early, rather than tying it up during the entire thread. */
VIR_FREE(args);
if (local.worker)
virThreadJobSetWorker(local.funcName);
else
virThreadJobSet(local.funcName);
local.func(local.opaque);
if (!local.worker)
virThreadJobClear(0);
return NULL;
}
int virThreadCreate(virThreadPtr thread,
bool joinable,
virThreadFunc func,
void *opaque)
int virThreadCreateFull(virThreadPtr thread,
bool joinable,
virThreadFunc func,
const char *funcName,
bool worker,
void *opaque)
{
struct virThreadArgs *args;
pthread_attr_t attr;
@ -216,6 +231,8 @@ int virThreadCreate(virThreadPtr thread,
}
args->func = func;
args->funcName = funcName;
args->worker = worker;
args->opaque = opaque;
if (!joinable)

View File

@ -88,10 +88,15 @@ void virThreadOnExit(void);
typedef void (*virThreadFunc)(void *opaque);
int virThreadCreate(virThreadPtr thread,
bool joinable,
virThreadFunc func,
void *opaque) ATTRIBUTE_RETURN_CHECK;
# define virThreadCreate(thread, joinable, func, opaque) \
virThreadCreateFull(thread, joinable, func, #func, false, opaque)
int virThreadCreateFull(virThreadPtr thread,
bool joinable,
virThreadFunc func,
const char *funcName,
bool worker,
void *opaque) ATTRIBUTE_RETURN_CHECK;
void virThreadSelf(virThreadPtr thread);
bool virThreadIsSelf(virThreadPtr thread);
void virThreadJoin(virThreadPtr thread);