Valgrind reports an invalid free of session_name when it is sourced
from the popt args. Only free it when it comes from the .lttngrc file.
This also caused spurious core dumps when running the tests on
one of my machines.
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I194cd36147a1028aad503b4e5d3ea23732a30bc5
static poptContext pc;
char *session_name = NULL;
const char *leftover = NULL;
static poptContext pc;
char *session_name = NULL;
const char *leftover = NULL;
+ bool free_session_name = false;
struct lttng_session *sessions = NULL;
int count;
int found;
struct lttng_session *sessions = NULL;
int count;
int found;
- /*
- * popt expects us to free this even if it returns a const char *.
- * See https://www.mail-archive.com/popt-devel@rpm5.org/msg00193.html
- * Force cast to char * allowing later freeing if necessary.
- */
session_name = (char *) poptGetArg(pc);
session_name = (char *) poptGetArg(pc);
if (!session_name) {
/* No session name specified, lookup default */
session_name = get_session_name();
if (!session_name) {
/* No session name specified, lookup default */
session_name = get_session_name();
success = 0;
goto mi_closing;
}
success = 0;
goto mi_closing;
}
+ free_session_name = true;
}
} else {
session_name = NULL;
}
} else {
session_name = NULL;
+ if (free_session_name) {
+ free(session_name);
+ }
/* Overwrite ret if an error occurred during clear_session/all */
ret = command_ret ? command_ret : ret;
/* Overwrite ret if an error occurred during clear_session/all */
ret = command_ret ? command_ret : ret;