diff --git a/src/machinarium.h b/src/machinarium.h index 5958d848..7892e468 100644 --- a/src/machinarium.h +++ b/src/machinarium.h @@ -39,7 +39,7 @@ machinarium_free(void); /* machine control */ MACHINE_API int -machine_create(machine_function_t, void *arg); +machine_create(char *name, machine_function_t, void *arg); MACHINE_API void machine_stop(void); diff --git a/src/mm_machine.c b/src/mm_machine.c index ed1da9ee..60325448 100644 --- a/src/mm_machine.c +++ b/src/mm_machine.c @@ -34,24 +34,31 @@ machine_main(void *arg) { mm_machine_t *machine = arg; mm_self = machine; - machine->online = 1; + /* set thread name */ + if (machine->name) + mm_thread_set_name(&machine->thread, machine->name); + + /* create main fiber */ int64_t id; id = machine_create_fiber(machine->main, machine->main_arg); (void)id; + /* run main loop */ + machine->online = 1; for (;;) { if (! mm_scheduler_online(&machine->scheduler)) break; mm_loop_step(&machine->loop); } + machine->online = 0; machine_free(machine); return NULL; } MACHINE_API int -machine_create(machine_function_t function, void *arg) +machine_create(char *name, machine_function_t function, void *arg) { mm_machine_t *machine; machine = malloc(sizeof(*machine)); @@ -61,6 +68,14 @@ machine_create(machine_function_t function, void *arg) machine->id = 0; machine->main = function; machine->main_arg = arg; + machine->name = NULL; + if (name) { + machine->name = strdup(name); + if (machine->name == NULL) { + free(machine); + return -1; + } + } mm_list_init(&machine->link); mm_scheduler_init(&machine->scheduler, 2048 /* 16K */, machine); int rc; @@ -92,6 +107,8 @@ machine_join(int id) if (rc == -1) return -1; rc = mm_thread_join(&machine->thread); + if (machine->name) + free(machine->name); free(machine); return rc; } diff --git a/src/mm_machine.h b/src/mm_machine.h index ecb0d49a..d7d6e32e 100644 --- a/src/mm_machine.h +++ b/src/mm_machine.h @@ -12,6 +12,7 @@ typedef struct mm_machine_t mm_machine_t; struct mm_machine_t { int online; int id; + char *name; machine_function_t main; void *main_arg; mm_thread_t thread; diff --git a/src/mm_thread.c b/src/mm_thread.c index 12d91b80..601d9e20 100644 --- a/src/mm_thread.c +++ b/src/mm_thread.c @@ -25,3 +25,10 @@ int mm_thread_join(mm_thread_t *thread) rc = pthread_join(thread->id, NULL); return rc; } + +int mm_thread_set_name(mm_thread_t *thread, char *name) +{ + int rc; + rc = pthread_setname_np(thread->id, name); + return rc; +} diff --git a/src/mm_thread.h b/src/mm_thread.h index 556fb0d7..269c002e 100644 --- a/src/mm_thread.h +++ b/src/mm_thread.h @@ -19,5 +19,6 @@ struct mm_thread_t { int mm_thread_create(mm_thread_t*, mm_thread_function_t, void*); int mm_thread_join(mm_thread_t*); +int mm_thread_set_name(mm_thread_t*, char*); #endif diff --git a/tests/test_accept_cancel.c b/tests/test_accept_cancel.c index 52f82ace..b5c6a633 100644 --- a/tests/test_accept_cancel.c +++ b/tests/test_accept_cancel.c @@ -58,7 +58,7 @@ test_accept_cancel(void) machinarium_init(); int id; - id = machine_create(test_waiter, NULL); + id = machine_create("test", test_waiter, NULL); test(id != -1); int rc; diff --git a/tests/test_accept_timeout.c b/tests/test_accept_timeout.c index b316e6ea..96a0f416 100644 --- a/tests/test_accept_timeout.c +++ b/tests/test_accept_timeout.c @@ -41,7 +41,7 @@ test_accept_timeout(void) machinarium_init(); int id; - id = machine_create(test_server, NULL); + id = machine_create("test", test_server, NULL); test(id != -1); int rc; diff --git a/tests/test_client_server.c b/tests/test_client_server.c index 671fa677..027f4f6a 100644 --- a/tests/test_client_server.c +++ b/tests/test_client_server.c @@ -87,7 +87,7 @@ test_client_server(void) machinarium_init(); int id; - id = machine_create(test_cs, NULL); + id = machine_create("test", test_cs, NULL); test(id != -1); int rc; diff --git a/tests/test_client_server_readahead.c b/tests/test_client_server_readahead.c index 1d0d82e9..37c524c8 100644 --- a/tests/test_client_server_readahead.c +++ b/tests/test_client_server_readahead.c @@ -110,7 +110,7 @@ test_client_server_readahead(void) machinarium_init(); int id; - id = machine_create(test_cs, NULL); + id = machine_create("test", test_cs, NULL); test(id != -1); int rc; diff --git a/tests/test_condition0.c b/tests/test_condition0.c index 4d91257b..a3405225 100644 --- a/tests/test_condition0.c +++ b/tests/test_condition0.c @@ -38,7 +38,7 @@ test_condition0(void) machinarium_init(); int id; - id = machine_create(test_waiter, NULL); + id = machine_create("test", test_waiter, NULL); test(id != -1); int rc; diff --git a/tests/test_condition1.c b/tests/test_condition1.c index 2f74f734..ce2bba0a 100644 --- a/tests/test_condition1.c +++ b/tests/test_condition1.c @@ -37,7 +37,7 @@ test_condition1(void) machinarium_init(); int id; - id = machine_create(test_waiter, NULL); + id = machine_create("test", test_waiter, NULL); test(id != -1); int rc; diff --git a/tests/test_connect.c b/tests/test_connect.c index 0e174ee7..c0c9f0e0 100644 --- a/tests/test_connect.c +++ b/tests/test_connect.c @@ -52,7 +52,7 @@ test_connect(void) machinarium_init(); int id; - id = machine_create(test_waiter, NULL); + id = machine_create("test", test_waiter, NULL); test(id != -1); int rc; diff --git a/tests/test_connect_cancel0.c b/tests/test_connect_cancel0.c index f8ca9d4e..524a5cd1 100644 --- a/tests/test_connect_cancel0.c +++ b/tests/test_connect_cancel0.c @@ -50,7 +50,7 @@ test_connect_cancel0(void) machinarium_init(); int id; - id = machine_create(test_waiter, NULL); + id = machine_create("test", test_waiter, NULL); test(id != -1); int rc; diff --git a/tests/test_connect_cancel1.c b/tests/test_connect_cancel1.c index 85ff54c4..a2c4a9a9 100644 --- a/tests/test_connect_cancel1.c +++ b/tests/test_connect_cancel1.c @@ -52,7 +52,7 @@ test_connect_cancel1(void) machinarium_init(); int id; - id = machine_create(test_waiter, NULL); + id = machine_create("test", test_waiter, NULL); test(id != -1); int rc; diff --git a/tests/test_connect_timeout.c b/tests/test_connect_timeout.c index 48cbf2bf..59f31313 100644 --- a/tests/test_connect_timeout.c +++ b/tests/test_connect_timeout.c @@ -46,7 +46,7 @@ test_connect_timeout(void) machinarium_init(); int id; - id = machine_create(test_waiter, NULL); + id = machine_create("test", test_waiter, NULL); test(id != -1); int rc; diff --git a/tests/test_context_switch.c b/tests/test_context_switch.c index 5ccd24f7..3f1501ea 100644 --- a/tests/test_context_switch.c +++ b/tests/test_context_switch.c @@ -39,7 +39,7 @@ test_context_switch(void) machinarium_init(); int id; - id = machine_create(csw_runner, NULL); + id = machine_create("test", csw_runner, NULL); test(id != -1); int rc; diff --git a/tests/test_create.c b/tests/test_create.c index 9fbbd8b7..b91ab026 100644 --- a/tests/test_create.c +++ b/tests/test_create.c @@ -23,7 +23,7 @@ test_create(void) machinarium_init(); int id; - id = machine_create(fiber, NULL); + id = machine_create("test", fiber, NULL); test(id != -1); int rc; diff --git a/tests/test_getaddrinfo0.c b/tests/test_getaddrinfo0.c index b689e9c4..7413a494 100644 --- a/tests/test_getaddrinfo0.c +++ b/tests/test_getaddrinfo0.c @@ -31,7 +31,7 @@ test_getaddrinfo0(void) machinarium_init(); int id; - id = machine_create(test_gai, NULL); + id = machine_create("test", test_gai, NULL); test(id != -1); int rc; diff --git a/tests/test_getaddrinfo1.c b/tests/test_getaddrinfo1.c index 07a5cd64..f693c408 100644 --- a/tests/test_getaddrinfo1.c +++ b/tests/test_getaddrinfo1.c @@ -59,7 +59,7 @@ test_getaddrinfo1(void) machinarium_init(); int id; - id = machine_create(test_gai, NULL); + id = machine_create("test", test_gai, NULL); test(id != -1); int rc; diff --git a/tests/test_io_new.c b/tests/test_io_new.c index 7b3b34c2..73f2d121 100644 --- a/tests/test_io_new.c +++ b/tests/test_io_new.c @@ -23,7 +23,7 @@ test_io_new(void) machinarium_init(); int id; - id = machine_create(fiber, NULL); + id = machine_create("test", fiber, NULL); test(id != -1); int rc; diff --git a/tests/test_read_cancel.c b/tests/test_read_cancel.c index ea89a6b9..82882a5f 100644 --- a/tests/test_read_cancel.c +++ b/tests/test_read_cancel.c @@ -87,7 +87,7 @@ test_read_cancel(void) machinarium_init(); int id; - id = machine_create(test_cs, NULL); + id = machine_create("test", test_cs, NULL); test(id != -1); int rc; diff --git a/tests/test_read_timeout.c b/tests/test_read_timeout.c index 46ea0eb0..4c25ff58 100644 --- a/tests/test_read_timeout.c +++ b/tests/test_read_timeout.c @@ -79,7 +79,7 @@ test_read_timeout(void) machinarium_init(); int id; - id = machine_create(test_cs, NULL); + id = machine_create("test", test_cs, NULL); test(id != -1); int rc; diff --git a/tests/test_sleep.c b/tests/test_sleep.c index 40473b34..4926b304 100644 --- a/tests/test_sleep.c +++ b/tests/test_sleep.c @@ -21,7 +21,7 @@ test_sleep(void) machinarium_init(); int id; - id = machine_create(fiber, NULL); + id = machine_create("test", fiber, NULL); test(id != -1); int rc; diff --git a/tests/test_sleep_cancel0.c b/tests/test_sleep_cancel0.c index 445982b0..76649775 100644 --- a/tests/test_sleep_cancel0.c +++ b/tests/test_sleep_cancel0.c @@ -40,7 +40,7 @@ test_sleep_cancel0(void) machinarium_init(); int id; - id = machine_create(test_sleep_cancel0_parent, NULL); + id = machine_create("test", test_sleep_cancel0_parent, NULL); test(id != -1); int rc; diff --git a/tests/test_sleep_yield.c b/tests/test_sleep_yield.c index d4c696bd..02ca59de 100644 --- a/tests/test_sleep_yield.c +++ b/tests/test_sleep_yield.c @@ -21,7 +21,7 @@ test_sleep_yield(void) machinarium_init(); int id; - id = machine_create(fiber, NULL); + id = machine_create("test", fiber, NULL); test(id != -1); int rc; diff --git a/tests/test_wait.c b/tests/test_wait.c index bed897b1..1f03eaad 100644 --- a/tests/test_wait.c +++ b/tests/test_wait.c @@ -46,7 +46,7 @@ test_wait(void) machinarium_init(); int id; - id = machine_create(test_waiter, NULL); + id = machine_create("test", test_waiter, NULL); test(id != -1); int rc;