X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fmain.c;h=cef1040563b1f84ae2af85235c80752aa4cabfe9;hb=41e16a7c24eed8c602399781ff545b99930d73c6;hp=548cc43095b633bb09528085dfb878a5e99578f6;hpb=db322c4dcbe5bf4b8a16d8444fa7f56579c72b26;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c index 548cc4309..cef104056 100644 --- a/src/bin/lttng-sessiond/main.c +++ b/src/bin/lttng-sessiond/main.c @@ -4198,11 +4198,20 @@ static int set_option(int opt, const char *arg, const char *optname) opt_background = 1; break; case 'g': + /* + * If the override option is set, the pointer points to a + * *non* const thus freeing it even though the variable type is + * set to const. + */ + if (tracing_group_name_override) { + free((void *) tracing_group_name); + } tracing_group_name = strdup(arg); if (!tracing_group_name) { perror("strdup"); ret = -ENOMEM; } + tracing_group_name_override = 1; break; case 'h': usage(); @@ -4240,13 +4249,15 @@ static int set_option(int opt, const char *arg, const char *optname) case 'v': /* Verbose level can increase using multiple -v */ if (arg) { + /* Value obtained from config file */ lttng_opt_verbose = config_parse_value(arg); } else { - /* Only 3 level of verbosity (-vvv). */ - if (lttng_opt_verbose < 3) { - lttng_opt_verbose += 1; - } + /* -v used on command line */ + lttng_opt_verbose++; } + /* Clamp value to [0, 3] */ + lttng_opt_verbose = lttng_opt_verbose < 0 ? 0 : + (lttng_opt_verbose <= 3 ? lttng_opt_verbose : 3); break; case 'Z': if (arg) { @@ -4256,6 +4267,9 @@ static int set_option(int opt, const char *arg, const char *optname) } break; case 'u': + if (consumerd32_bin_override) { + free((void *) consumerd32_bin); + } consumerd32_bin = strdup(arg); if (!consumerd32_bin) { perror("strdup"); @@ -4264,6 +4278,9 @@ static int set_option(int opt, const char *arg, const char *optname) consumerd32_bin_override = 1; break; case 'U': + if (consumerd32_libdir_override) { + free((void *) consumerd32_libdir); + } consumerd32_libdir = strdup(arg); if (!consumerd32_libdir) { perror("strdup"); @@ -4272,6 +4289,9 @@ static int set_option(int opt, const char *arg, const char *optname) consumerd32_libdir_override = 1; break; case 't': + if (consumerd64_bin_override) { + free((void *) consumerd64_bin); + } consumerd64_bin = strdup(arg); if (!consumerd64_bin) { perror("strdup"); @@ -4280,6 +4300,9 @@ static int set_option(int opt, const char *arg, const char *optname) consumerd64_bin_override = 1; break; case 'T': + if (consumerd64_libdir_override) { + free((void *) consumerd64_libdir); + } consumerd64_libdir = strdup(arg); if (!consumerd64_libdir) { perror("strdup"); @@ -4288,6 +4311,7 @@ static int set_option(int opt, const char *arg, const char *optname) consumerd64_libdir_override = 1; break; case 'p': + free(opt_pidfile); opt_pidfile = strdup(arg); if (!opt_pidfile) { perror("strdup"); @@ -4313,6 +4337,7 @@ static int set_option(int opt, const char *arg, const char *optname) break; } case 'l': + free(opt_load_session_path); opt_load_session_path = strdup(arg); if (!opt_load_session_path) { perror("strdup"); @@ -4320,6 +4345,7 @@ static int set_option(int opt, const char *arg, const char *optname) } break; case 'P': /* probe modules list */ + free(kmod_probes_list); kmod_probes_list = strdup(arg); if (!kmod_probes_list) { perror("strdup");