From 9c9d917cfe2e6a9f35ef82cb64e442451210716f Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Thu, 6 Dec 2018 12:03:48 -0500 Subject: [PATCH] Make the launch of the application registration thread blocking MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Waiting for the application registration thread to be ready to accept application connection ensures that the application registration socket is created and being listened-to before the parent is signalled. Signed-off-by: Jérémie Galarneau --- src/bin/lttng-sessiond/register.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) 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); -- 2.34.1