Fix: report to client when snapshot will be empty
[lttng-tools.git] / src / bin / lttng-sessiond / ust-app.c
index c7bcc85f5e0b8fed7ef9aeff108f3fb630517e95..34d4c9b1558de816bd1935ba02eef50b1c90e511 100644 (file)
@@ -3125,7 +3125,6 @@ int ust_app_list_events(struct lttng_event **events)
                                        &uiter)) != -LTTNG_UST_ERR_NOENT) {
                        /* Handle ustctl error. */
                        if (ret < 0) {
-                               free(tmp_event);
                                if (ret != -LTTNG_UST_ERR_EXITING && ret != -EPIPE) {
                                        ERR("UST app tp list get failed for app %d with ret %d",
                                                        app->sock, ret);
@@ -3138,6 +3137,7 @@ int ust_app_list_events(struct lttng_event **events)
                                         */
                                        break;
                                }
+                               free(tmp_event);
                                goto rcu_error;
                        }
 
@@ -3225,7 +3225,6 @@ int ust_app_list_event_fields(struct lttng_event_field **fields)
                                        &uiter)) != -LTTNG_UST_ERR_NOENT) {
                        /* Handle ustctl error. */
                        if (ret < 0) {
-                               free(tmp_event);
                                if (ret != -LTTNG_UST_ERR_EXITING && ret != -EPIPE) {
                                        ERR("UST app tp list field failed for app %d with ret %d",
                                                        app->sock, ret);
@@ -3234,10 +3233,11 @@ int ust_app_list_event_fields(struct lttng_event_field **fields)
                                        /*
                                         * This is normal behavior, an application can die during the
                                         * creation process. Don't report an error so the execution can
-                                        * continue normally.
+                                        * continue normally. Reset list and count for next app.
                                         */
                                        break;
                                }
+                               free(tmp_event);
                                goto rcu_error;
                        }
 
@@ -4932,6 +4932,7 @@ int ust_app_snapshot_record(struct ltt_ust_session *usess,
                struct snapshot_output *output, int wait, unsigned int nb_streams)
 {
        int ret = 0;
+       unsigned int snapshot_done = 0;
        struct lttng_ht_iter iter;
        struct ust_app *app;
        char pathname[PATH_MAX];
@@ -5006,6 +5007,7 @@ int ust_app_snapshot_record(struct ltt_ust_session *usess,
                        if (ret < 0) {
                                goto error;
                        }
+                       snapshot_done = 1;
                }
                break;
        }
@@ -5073,6 +5075,7 @@ int ust_app_snapshot_record(struct ltt_ust_session *usess,
                        if (ret < 0) {
                                goto error;
                        }
+                       snapshot_done = 1;
                }
                break;
        }
@@ -5081,6 +5084,15 @@ int ust_app_snapshot_record(struct ltt_ust_session *usess,
                break;
        }
 
+       if (!snapshot_done) {
+               /*
+                * If no snapshot was made and we are not in the error path, this means
+                * that there are no buffers thus no (prior) application to snapshot
+                * data from so we have simply NO data.
+                */
+               ret = -ENODATA;
+       }
+
 error:
        rcu_read_unlock();
        return ret;
This page took 0.02531 seconds and 4 git commands to generate.