From b325dc70f0a88cbe23e4f55517d87dec382a806f Mon Sep 17 00:00:00 2001 From: David Goulet Date: Mon, 18 Feb 2013 16:05:58 -0500 Subject: [PATCH] Fix: put session list lock around the app registration A successful call from ust_app_register makes the application visible to the tracing registry on the client side so by moving this lock at the start of the registration process until the end, we are certain that the application does not receive an out of order message during registration. It basically protects the application registration from tracing command such as enable-event. This has been fixed in the master branch by an other commit during the 2.2 development phase. Signed-off-by: David Goulet --- src/bin/lttng-sessiond/main.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c index 461394e44..d95cfa9bb 100644 --- a/src/bin/lttng-sessiond/main.c +++ b/src/bin/lttng-sessiond/main.c @@ -658,8 +658,6 @@ static void update_ust_app(int app_sock) { struct ltt_session *sess, *stmp; - session_lock_list(); - /* For all tracing session(s) */ cds_list_for_each_entry_safe(sess, stmp, &session_list_ptr->head, list) { session_lock(sess); @@ -668,8 +666,6 @@ static void update_ust_app(int app_sock) } session_unlock(sess); } - - session_unlock_list(); } /* @@ -1167,12 +1163,22 @@ static void *thread_manage_apps(void *data) health_code_update(); + /* + * @session_lock + * Lock the global session list so from the register up to + * the registration done message, no thread can see the + * application and change its state. + */ + session_lock_list(); + /* Register applicaton to the session daemon */ ret = ust_app_register(&ust_cmd.reg_msg, ust_cmd.sock); if (ret == -ENOMEM) { + session_unlock_list(); goto error; } else if (ret < 0) { + session_unlock_list(); break; } @@ -1208,6 +1214,7 @@ static void *thread_manage_apps(void *data) ret = lttng_poll_add(&events, ust_cmd.sock, LPOLLERR & LPOLLHUP & LPOLLRDHUP); if (ret < 0) { + session_unlock_list(); goto error; } @@ -1220,6 +1227,7 @@ static void *thread_manage_apps(void *data) DBG("Apps with sock %d added to poll set", ust_cmd.sock); } + session_unlock_list(); health_code_update(); -- 2.34.1