From: David Goulet Date: Mon, 18 Feb 2013 21:05:58 +0000 (-0500) Subject: Fix: put session list lock around the app registration X-Git-Tag: v2.1.2~12 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=b325dc70f0a88cbe23e4f55517d87dec382a806f;p=lttng-tools.git 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 --- 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();