提交 55ebc93a 编写于 作者: J Jiri Denemark

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: NJiri Denemark <jdenemar@redhat.com>
上级 23d0c979
......@@ -2181,7 +2181,7 @@ virRWLockRead;
virRWLockUnlock;
virRWLockWrite;
virThreadCancel;
virThreadCreate;
virThreadCreateFull;
virThreadID;
virThreadInitialize;
virThreadIsSelf;
......
......@@ -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)
......
......@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册