X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fregister.c;h=319514a366839460f9e1bbf176fd0f21793a817f;hb=6cb45e931e18f489f1eb202396148529d86470a6;hp=b75db4ed9533f9c0e73025602b3729514d89d111;hpb=1785d7f29bf3f162f37152ee9ea8907b9bc6d9d2;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/register.c b/src/bin/lttng-sessiond/register.c index b75db4ed9..319514a36 100644 --- a/src/bin/lttng-sessiond/register.c +++ b/src/bin/lttng-sessiond/register.c @@ -37,6 +37,7 @@ struct thread_notifiers { struct lttng_pipe *quit_pipe; struct ust_cmd_queue *ust_cmd_queue; + sem_t ready; }; /* @@ -113,6 +114,21 @@ static void cleanup_application_registration_thread(void *data) free(notifiers); } +static +void mark_thread_as_ready(struct thread_notifiers *notifiers) +{ + DBG("Marking application registration thread as ready"); + sem_post(¬ifiers->ready); +} + +static +void wait_until_thread_is_ready(struct thread_notifiers *notifiers) +{ + DBG("Waiting for application registration thread to be ready"); + sem_wait(¬ifiers->ready); + DBG("Application registration thread is ready"); +} + /* * This thread manage application registration. */ @@ -150,6 +166,8 @@ static void *thread_application_registration(void *data) goto error_listen; } + mark_thread_as_ready(notifiers); + /* * Pass 2 as size here for the thread quit pipe and apps_sock. Nothing * more will be added to this poll set. @@ -361,7 +379,7 @@ static bool shutdown_application_registration_thread(void *data) return notify_thread_pipe(write_fd) == 1; } -bool launch_application_registration_thread( +struct lttng_thread *launch_application_registration_thread( struct ust_cmd_queue *cmd_queue) { struct lttng_pipe *quit_pipe; @@ -379,6 +397,7 @@ bool launch_application_registration_thread( } notifiers->quit_pipe = quit_pipe; notifiers->ust_cmd_queue = cmd_queue; + sem_init(¬ifiers->ready, 0, 0); thread = lttng_thread_create("UST application registration", thread_application_registration, @@ -388,9 +407,9 @@ bool launch_application_registration_thread( if (!thread) { goto error; } - lttng_thread_put(thread); - return true; + wait_until_thread_is_ready(notifiers); + return thread; error: cleanup_application_registration_thread(notifiers); - return false; + return NULL; }