#include <common/mi-lttng.h>
#include <common/sessiond-comm/sessiond-comm.h>
+#include <common/utils.h>
static char *opt_session_name;
static int opt_destroy_all;
static int destroy_session(struct lttng_session *session)
{
int ret;
+ char *session_name = NULL;
ret = lttng_destroy_session(session->name);
if (ret < 0) {
}
MSG("Session %s destroyed", session->name);
- config_destroy_default();
+
+ session_name = get_session_name_quiet();
+ if (session_name && !strncmp(session->name, session_name, NAME_MAX)) {
+ config_destroy_default();
+ }
if (lttng_opt_mi) {
ret = mi_lttng_session(writer, session, 0);
ret = CMD_SUCCESS;
error:
+ free(session_name);
return ret;
}
} else {
opt_session_name = (char *) poptGetArg(pc);
- if (opt_session_name == NULL) {
+ if (!opt_session_name) {
/* No session name specified, lookup default */
session_name = get_session_name();
if (session_name == NULL) {
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
+#include <errno.h>
#include <common/common.h>
#include <common/utils.h>
return S_ISREG(info.st_mode) || S_ISDIR(info.st_mode);
}
-/*
- * Returns the session name from the config file.
- * The caller is responsible for freeing the returned string.
- * On error, NULL is returned.
- */
-char *config_read_session_name(char *path)
+static
+int _config_read_session_name(char *path, char **name)
{
- int ret;
+ int ret = 0;
FILE *fp;
char var[NAME_MAX], *session_name;
#if (NAME_MAX == 255)
session_name = zmalloc(NAME_MAX);
if (session_name == NULL) {
+ ret = -ENOMEM;
ERR("Out of memory");
goto error;
}
fp = open_config(path, "r");
if (fp == NULL) {
- ERR("Can't find valid lttng config %s/.lttngrc", path);
- MSG("Did you create a session? (lttng create <my_session>)");
- free(session_name);
+ ret = -ENOENT;
goto error;
}
}
error_close:
- free(session_name);
- ret = fclose(fp);
- if (ret < 0) {
+ if (fclose(fp) < 0) {
PERROR("close config read session name");
}
-
error:
- return NULL;
-
+ free(session_name);
+ return ret;
found:
- ret = fclose(fp);
- if (ret < 0) {
+ *name = session_name;
+ if (fclose(fp) < 0) {
PERROR("close config read session name found");
}
- return session_name;
+ return ret;
+}
+
+/*
+ * Returns the session name from the config file.
+ *
+ * The caller is responsible for freeing the returned string.
+ * On error, NULL is returned.
+ */
+char *config_read_session_name(char *path)
+{
+ int ret;
+ char *name = NULL;
+
+ ret = _config_read_session_name(path, &name);
+ if (ret == -ENOENT) {
+ const char *home_dir = utils_get_home_dir();
+
+ ERR("Can't find valid lttng config %s/.lttngrc", home_dir);
+ MSG("Did you create a session? (lttng create <my_session>)");
+ }
+
+ return name;
+}
+
+/*
+ * Returns the session name from the config file. (no warnings/errors emitted)
+ *
+ * The caller is responsible for freeing the returned string.
+ * On error, NULL is returned.
+ */
+char *config_read_session_name_quiet(char *path)
+{
+ char *name = NULL;
+ (void) _config_read_session_name(path, &name);
+ return name;
}
/*
/* Must free() the return pointer */
char *config_read_session_name(char *path);
+char *config_read_session_name_quiet(char *path);
char *config_get_file_path(char *path);
#endif /* _LTTNG_CONFIG_H */
static const char *str_jul = "JUL";
static const char *str_log4j = "LOG4J";
-/*
- * get_session_name
- *
- * Return allocated string with the session name found in the config
- * directory.
- */
-char *get_session_name(void)
+static
+char *_get_session_name(int quiet)
{
char *path, *session_name = NULL;
}
/* Get session name from config */
- session_name = config_read_session_name(path);
+ session_name = quiet ? config_read_session_name_quiet(path) :
+ config_read_session_name(path);
if (session_name == NULL) {
goto error;
}
return NULL;
}
+/*
+ * get_session_name
+ *
+ * Return allocated string with the session name found in the config
+ * directory.
+ */
+char *get_session_name(void)
+{
+ return _get_session_name(0);
+}
+
+/*
+ * get_session_name_quiet (no warnings/errors emitted)
+ *
+ * Return allocated string with the session name found in the config
+ * directory.
+ */
+char *get_session_name_quiet(void)
+{
+ return _get_session_name(1);
+}
+
/*
* list_commands
*
struct cmd_struct;
char *get_session_name(void);
+char *get_session_name_quiet(void);
void list_commands(struct cmd_struct *commands, FILE *ofp);
void list_cmd_options(FILE *ofp, struct poptOption *options);