Fix: keep ust/kernel session items around for destroy notifier
[lttng-tools.git] / src / bin / lttng-sessiond / session.c
index 6e187f2ff51df9c17fb162f0096e7e6a92d7a372..514b11e9919da0c2814aa99096c4bcd99862d892 100644 (file)
@@ -802,11 +802,10 @@ void session_release(struct urcu_ref *ref)
        usess = session->ust_session;
        ksess = session->kernel_session;
 
-        /* Clean kernel session teardown */
+        /* Clean kernel session teardown, keeping data for destroy notifier. */
        kernel_destroy_session(ksess);
-       session->kernel_session = NULL;
 
-       /* UST session teardown */
+       /* UST session teardown, keeping data for destroy notifier. */
        if (usess) {
                /* Close any relayd session */
                consumer_output_send_destroy_relayd(usess->consumer);
@@ -817,9 +816,8 @@ void session_release(struct urcu_ref *ref)
                        ERR("Error in ust_app_destroy_trace_all");
                }
 
-               /* Clean up the rest. */
+               /* Clean up the rest, keeping destroy notifier data. */
                trace_ust_destroy_session(usess);
-               session->ust_session = NULL;
        }
 
        /*
@@ -844,6 +842,13 @@ void session_release(struct urcu_ref *ref)
                del_session_ht(session);
        }
        session_notify_destruction(session);
+
+       kernel_free_session(ksess);
+       session->kernel_session = NULL;
+       if (usess) {
+               trace_ust_free_session(usess);
+               session->ust_session = NULL;
+       }
        lttng_dynamic_array_reset(&session->destroy_notifiers);
        free(session->last_archived_chunk_name);
        free(session);
This page took 0.024359 seconds and 5 git commands to generate.