X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fregister.c;h=319514a366839460f9e1bbf176fd0f21793a817f;hp=6776019c68d3cdef3cfd4439906363a56b345c39;hb=9c9d917cfe2e6a9f35ef82cb64e442451210716f;hpb=bd9addf713e7dc8fc47499f62312966a3a5f4d46 diff --git a/src/bin/lttng-sessiond/register.c b/src/bin/lttng-sessiond/register.c index 6776019c6..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. @@ -379,6 +397,7 @@ struct lttng_thread *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,6 +407,7 @@ struct lttng_thread *launch_application_registration_thread( if (!thread) { goto error; } + wait_until_thread_is_ready(notifiers); return thread; error: cleanup_application_registration_thread(notifiers);