Teardown the notification thread after the sessiond clean-up
[lttng-tools.git] / src / bin / lttng-sessiond / save.c
index c0684711ac9c818ea43a13d2945c4f168c1d876b..ce9f2f9ff1772910ac5ce1a1b3b8023e566214c9 100644 (file)
@@ -504,8 +504,8 @@ int save_kernel_userspace_probe_tracepoint_event(struct config_writer *writer,
 {
        int ret = 0;
        const char *probe_name, *provider_name, *binary_path;
-       struct lttng_userspace_probe_location *userspace_probe_location;
-       struct lttng_userspace_probe_location_lookup_method *lookup_method;
+       const struct lttng_userspace_probe_location *userspace_probe_location;
+       const struct lttng_userspace_probe_location_lookup_method *lookup_method;
        enum lttng_userspace_probe_location_lookup_method_type lookup_type;
 
        /* Get userspace probe location from the event. */
@@ -618,8 +618,8 @@ int save_kernel_userspace_probe_function_event(struct config_writer *writer,
 {
        int ret = 0;
        const char *function_name, *binary_path;
-       struct lttng_userspace_probe_location *userspace_probe_location;
-       struct lttng_userspace_probe_location_lookup_method *lookup_method;
+       const struct lttng_userspace_probe_location *userspace_probe_location;
+       const struct lttng_userspace_probe_location_lookup_method *lookup_method;
        enum lttng_userspace_probe_location_lookup_method_type lookup_type;
 
        /* Get userspace probe location from the event. */
@@ -2245,6 +2245,9 @@ int save_session_rotation_schedules(struct config_writer *writer,
 
        ret = config_writer_open_element(writer,
                        config_element_rotation_schedules);
+       if (ret) {
+               goto end;
+       }
        if (session->rotate_timer_period) {
                ret = save_session_rotation_schedule(writer,
                                LTTNG_ROTATION_SCHEDULE_TYPE_PERIODIC,
@@ -2298,7 +2301,7 @@ int save_session(struct ltt_session *session,
 
        if (!session_access_ok(session,
                LTTNG_SOCK_GET_UID_CRED(creds),
-               LTTNG_SOCK_GET_GID_CRED(creds))) {
+               LTTNG_SOCK_GET_GID_CRED(creds)) || session->destroyed) {
                ret = LTTNG_ERR_EPERM;
                goto end;
        }
@@ -2524,6 +2527,7 @@ int cmd_save_sessions(struct lttng_save_session_attr *attr,
                session_lock(session);
                ret = save_session(session, attr, creds);
                session_unlock(session);
+               session_put(session);
                if (ret) {
                        goto end;
                }
@@ -2531,10 +2535,13 @@ int cmd_save_sessions(struct lttng_save_session_attr *attr,
                struct ltt_session_list *list = session_get_list();
 
                cds_list_for_each_entry(session, &list->head, list) {
+                       if (!session_get(session)) {
+                               continue;
+                       }
                        session_lock(session);
                        ret = save_session(session, attr, creds);
                        session_unlock(session);
-
+                       session_put(session);
                        /* Don't abort if we don't have the required permissions. */
                        if (ret && ret != LTTNG_ERR_EPERM) {
                                goto end;
This page took 0.024764 seconds and 4 git commands to generate.