Signed-off-by: Jonathan Rajotte <jonathan.rajotte-jul...@efficios.com>
---

Feel free to squash this into the previous commit.

---
 src/bin/lttng-sessiond/cmd.c | 64 +++++++++++++++++++++++++-----------
 1 file changed, 44 insertions(+), 20 deletions(-)

diff --git a/src/bin/lttng-sessiond/cmd.c b/src/bin/lttng-sessiond/cmd.c
index 1dec61ea1..3ee390698 100644
--- a/src/bin/lttng-sessiond/cmd.c
+++ b/src/bin/lttng-sessiond/cmd.c
@@ -2739,6 +2739,42 @@ error:
        return ret;
 }
 
+/*
+ * Set the base_path of the session only if subdir of a control uris is set.
+ * Return LTTNG_OK on success, otherwise LTTNG_ERR_*.
+ */
+static int set_session_base_path_from_uris(struct ltt_session *session,
+               size_t nb_uri,
+               struct lttng_uri *uris)
+{
+       int ret;
+       for (int i = 0; i < nb_uri; i++) {
+               if (uris[i].stype != LTTNG_STREAM_CONTROL ||
+                               uris[i].subdir[0] == '\0') {
+                       /* Not interested in these URIs */
+                       continue;
+               }
+
+               if (session->base_path != NULL) {
+                       free(session->base_path);
+                       session->base_path = NULL;
+               }
+
+               /* Set session base_path */
+               session->base_path = strdup(uris[i].subdir);
+               if (!session->base_path) {
+                       PERROR("Copying base path: %s", uris[i].subdir);
+                       ret = LTTNG_ERR_NOMEM;
+                       goto error;
+               }
+               DBG2("Setting base path for session %" PRIu64 ": %s",
+                               session->id, session->base_path);
+       }
+       ret = LTTNG_OK;
+error:
+       return ret;
+}
+
 /*
  * Command LTTNG_SET_CONSUMER_URI processed by the client thread.
  */
@@ -2759,26 +2795,14 @@ int cmd_set_consumer_uri(struct ltt_session *session, 
size_t nb_uri,
                goto error;
        }
 
-       for (i = 0; i < nb_uri; i++) {
-               if (uris[i].stype != LTTNG_STREAM_CONTROL ||
-                               uris[i].subdir[0] == '\0') {
-                       /* Not interested in these URIs */
-                       continue;
-               }
-
-               if (session->base_path != NULL) {
-                       free(session->base_path);
-                       session->base_path = NULL;
-               }
-
-               /* Set session base_path */
-               session->base_path = strdup(uris[i].subdir);
-               if (!session->base_path) {
-                       PERROR("Copying base path: %s", uris[i].subdir);
-                       goto error;
-               }
-               DBG2("Setting base path for session %" PRIu64 ": %s",
-                               session->id, session->base_path);
+       /*
+        * Set the session base path if any. This is done inside
+        * cmd_set_consumer_uri to preserve backward compatibility of the
+        * previous session creation api vs the session descriptor api.
+        */
+       ret = set_session_base_path_from_uris(session, nb_uri, uris);
+       if (ret != LTTNG_OK) {
+               goto error;
        }
 
        /* Set the "global" consumer URIs */
-- 
2.17.1

_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to