diff --git a/src/backend/threads.c b/src/backend/threads.c index 4fe0c8ac5..b943d55fc 100644 --- a/src/backend/threads.c +++ b/src/backend/threads.c @@ -54,6 +54,12 @@ const char* lumiera_threadclass_names[] = { #undef LUMIERA_THREAD_CLASS +#define LUMIERA_THREAD_STATE(name) #name, +const char* lumiera_threadstate_names[] = { + LUMIERA_THREAD_STATES +}; +#undef LUMIERA_THREAD_STATE + struct lumiera_thread_mockup { void (*fn)(void*); diff --git a/src/backend/threads.h b/src/backend/threads.h index ce9a7605b..416e160a0 100644 --- a/src/backend/threads.h +++ b/src/backend/threads.h @@ -90,18 +90,28 @@ enum lumiera_thread_class // defined in threads.c extern const char* lumiera_threadclass_names[]; +#define LUMIERA_THREAD_STATES \ + LUMIERA_THREAD_STATE(IDLE) \ + LUMIERA_THREAD_STATE(RUNNING) \ + LUMIERA_THREAD_STATE(ERROR) + +#define LUMIERA_THREAD_STATE(name) LUMIERA_THREADSTATE_##name, + /** * Thread state. * These are the only states our threads can be in. */ typedef enum { - LUMIERA_THREADSTATE_IDLE, - LUMIERA_THREADSTATE_RUNNING, - LUMIERA_THREADSTATE_ERROR + LUMIERA_THREAD_STATES } lumiera_thread_state; +#undef LUMIERA_THREAD_STATE + +// defined in threads.c +extern const char* lumiera_threadstate_names[]; + #include "threadpool.h" /** diff --git a/tests/30backend-threadpool.tests b/tests/30backend-threadpool.tests index e4f4e4005..c136aff42 100644 --- a/tests/30backend-threadpool.tests +++ b/tests/30backend-threadpool.tests @@ -10,7 +10,9 @@ err: start by initializing the threadpool err: acquiring thread 1 err: acquiring thread 2 err: thread 1 kind=INTERACTIVE +err: thread 1 state=IDLE err: thread 2 kind=IDLE +err: thread 2 state=IDLE err: releasing thread 1 err: thread 1 has been released err: releasing thread 2 diff --git a/tests/backend/test-threadpool.c b/tests/backend/test-threadpool.c index 0a4319bfb..0c516e306 100644 --- a/tests/backend/test-threadpool.c +++ b/tests/backend/test-threadpool.c @@ -46,11 +46,11 @@ TEST ("basic-acquire-release") ECHO("thread 1 kind=%s", lumiera_threadclass_names[t1->kind]); CHECK(LUMIERA_THREADCLASS_INTERACTIVE == t1->kind); - //ECHO("thread 1 state=%d", t1->state); + ECHO("thread 1 state=%s", lumiera_threadstate_names[t1->state]); CHECK(LUMIERA_THREADSTATE_IDLE == t1->state); ECHO("thread 2 kind=%s", lumiera_threadclass_names[t2->kind]); CHECK(LUMIERA_THREADCLASS_IDLE == t2->kind); - //ECHO("thread 2 state=%d", t2->state); + ECHO("thread 2 state=%s", lumiera_threadstate_names[t2->state]); CHECK(LUMIERA_THREADSTATE_IDLE == t2->state); ECHO("releasing thread 1");