Perform the clean-up of application notify sockets in main thread
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 6 Dec 2018 19:47:34 +0000 (14:47 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 6 Dec 2018 21:34:34 +0000 (16:34 -0500)
The notify sockets of applications are owned by the "notify-apps"
thread. If an application exits during the course of the session
daemon's life, the notify thread will take care of cleaning its
associated notify socket.

However, there is no teardown/clean-up code to handle their
clean-up when the daemon is torn down.

This change adds a new step in the sessiond clean-up code that
closes closes all notify sockets present in the
ust_app_by_notify_sock hash table at the time of the sessiond
cleanup.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/bin/lttng-sessiond/ust-app.c

index e2b7a083c0ecb33eb95db9c8789abe34c154f2f8..8c5f3f6afc0e3dfdb7ad225f2963bce7bd526624 100644 (file)
@@ -3921,6 +3921,24 @@ void ust_app_clean_list(void)
 
        rcu_read_lock();
 
+       /* Cleanup notify socket hash table */
+       if (ust_app_ht_by_notify_sock) {
+               cds_lfht_for_each_entry(ust_app_ht_by_notify_sock->ht, &iter.iter, app,
+                               notify_sock_n.node) {
+                       struct cds_lfht_node *node;
+                       struct ust_app *app;
+
+                       node = cds_lfht_iter_get_node(&iter.iter);
+                       if (!node) {
+                               continue;
+                       }
+
+                       app = container_of(node, struct ust_app,
+                                       notify_sock_n.node);
+                       ust_app_notify_sock_unregister(app->notify_sock);
+               }
+       }
+
        if (ust_app_ht) {
                cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) {
                        ret = lttng_ht_del(ust_app_ht, &iter);
@@ -3938,14 +3956,6 @@ void ust_app_clean_list(void)
                }
        }
 
-       /* Cleanup notify socket hash table */
-       if (ust_app_ht_by_notify_sock) {
-               cds_lfht_for_each_entry(ust_app_ht_by_notify_sock->ht, &iter.iter, app,
-                               notify_sock_n.node) {
-                       ret = lttng_ht_del(ust_app_ht_by_notify_sock, &iter);
-                       assert(!ret);
-               }
-       }
        rcu_read_unlock();
 
        /* Destroy is done only when the ht is empty */
This page took 0.03769 seconds and 5 git commands to generate.