Fix segfault for ltt-sessiond pathname
authorDavid Goulet <david.goulet@polymtl.ca>
Fri, 22 Apr 2011 14:56:59 +0000 (10:56 -0400)
committerDavid Goulet <david.goulet@polymtl.ca>
Fri, 22 Apr 2011 14:58:23 +0000 (10:58 -0400)
The getenv sessiond path could return NULL so the strdup failed
at this point.

Also added the "not running" indication when listing pids that are not
found in /proc.

Signed-off-by: David Goulet <david.goulet@polymtl.ca>
lttng/lttng.c

index f4fab034f8f34c390570915c5b1f57b0dea4e57a..c7ff4edde334dd5131e1b207c902498cc8fc5ce1 100644 (file)
@@ -122,22 +122,24 @@ error:
  */
 static int process_opt_list_apps(void)
 {
-       int i, ret;
+       int i, ret, count;
        pid_t *pids;
        FILE *fp;
        char path[24];  /* Can't go bigger than /proc/65535/cmdline */
        char cmdline[PATH_MAX];
 
-       ret = lttng_ust_list_apps(&pids);
-       if (ret < 0) {
+       count = lttng_ust_list_apps(&pids);
+       if (count < 0) {
+               ret = count;
                goto error;
        }
 
        MSG("LTTng UST traceable application [name (pid)]:");
-       for (i=0; i < ret; i++) {
+       for (i=0; i < count; i++) {
                snprintf(path, sizeof(path), "/proc/%d/cmdline", pids[i]);
                fp = fopen(path, "r");
                if (fp == NULL) {
+                       MSG("\t(not running) (%d)", pids[i]);
                        continue;
                }
                ret = fread(cmdline, 1, sizeof(cmdline), fp);
@@ -219,7 +221,13 @@ static int check_ltt_sessiond(void)
                        pathname = opt_sessiond_path;
                } else {
                        /* Try LTTNG_SESSIOND_PATH env variable */
-                       pathname = strdup(getenv(LTTNG_SESSIOND_PATH_ENV));
+                       pathname = getenv(LTTNG_SESSIOND_PATH_ENV);
+                       if (pathname != NULL) {
+                               /* strdup here in order to make the free()
+                                * not fail later on.
+                                */
+                               pathname = strdup(pathname);
+                       }
                }
 
                /* Let's rock and roll */
This page took 0.034666 seconds and 4 git commands to generate.