*/
#define _GNU_SOURCE
+#define _LGPL_SOURCE
#include <assert.h>
#include <ctype.h>
#include <popt.h>
static char *opt_url;
static char *opt_ctrl_url;
static char *opt_data_url;
+static char *opt_shm_path;
static int opt_no_consumer;
static int opt_no_output;
static int opt_snapshot;
static unsigned int opt_live_timer;
-static int opt_disable_consumer;
enum {
OPT_HELP = 1,
{"data-url", 'D', POPT_ARG_STRING, &opt_data_url, 0, 0, 0},
{"no-output", 0, POPT_ARG_VAL, &opt_no_output, 1, 0, 0},
{"no-consumer", 0, POPT_ARG_VAL, &opt_no_consumer, 1, 0, 0},
- {"disable-consumer", 0, POPT_ARG_VAL, &opt_disable_consumer, 1, 0, 0},
{"snapshot", 0, POPT_ARG_VAL, &opt_snapshot, 1, 0, 0},
{"live", 0, POPT_ARG_INT | POPT_ARGFLAG_OPTIONAL, 0, OPT_LIVE_TIMER, 0, 0},
+ {"shm-path", 0, POPT_ARG_STRING, &opt_shm_path, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0}
};
fprintf(ofp, " By default, %u is used for the timer and the\n",
DEFAULT_LTTNG_LIVE_TIMER);
fprintf(ofp, " network URL is set to net://127.0.0.1.\n");
+ fprintf(ofp, " --shm-path PATH Path where shared memory holding buffers\n");
+ fprintf(ofp, " should be created. Useful when used with pramfs\n");
+ fprintf(ofp, " to extract trace data after crash.\n");
fprintf(ofp, "\n");
fprintf(ofp, "Extended Options:\n");
fprintf(ofp, "\n");
fprintf(ofp, " -U, --set-url=URL Set URL destination of the trace data.\n");
fprintf(ofp, " It is persistent for the session lifetime.\n");
fprintf(ofp, " This will set both data and control URL.\n");
- fprintf(ofp, " You can change it with the enable-consumer cmd\n");
fprintf(ofp, " -C, --ctrl-url=URL Set control path URL. (Must use -D also)\n");
fprintf(ofp, " -D, --data-url=URL Set data path URL. (Must use -C also)\n");
fprintf(ofp, "\n");
}
/*
- * Retrieve the created session and
- * mi output it of the created session based on provided argument
+ * Retrieve the created session and mi output it based on provided argument
* This is currently a summary of what was pretty printed and is subject to
* enhancements.
- * str_url is a placement string for output url (snapshot or regular trace)
*/
static int mi_created_session(const char *session_name)
{
char session_name_date[NAME_MAX + 17], *print_str_url = NULL;
time_t rawtime;
struct tm *timeinfo;
+ char shm_path[PATH_MAX] = "";
/* Get date and time for automatic session name/path */
time(&rawtime);
*/
url = NULL;
} else if (!opt_no_output) {
+ char *tmp_path;
+
/* Auto output path */
- alloc_path = utils_get_home_dir();
- if (alloc_path == NULL) {
+ tmp_path = utils_get_home_dir();
+ if (tmp_path == NULL) {
ERR("HOME path not found.\n \
Please specify an output path using -o, --output PATH");
ret = CMD_FATAL;
goto error;
}
- alloc_path = strdup(alloc_path);
-
+ alloc_path = strdup(tmp_path);
+ if (!alloc_path) {
+ PERROR("allocating alloc_path");
+ ret = CMD_FATAL;
+ goto error;
+ }
ret = asprintf(&alloc_url,
"file://%s/" DEFAULT_TRACE_DIR_NAME "/%s",
alloc_path, session_name_date);
}
}
+ if (opt_shm_path) {
+ ret = snprintf(shm_path, sizeof(shm_path),
+ "%s/%s", opt_shm_path, session_name_date);
+ if (ret < 0) {
+ PERROR("snprintf shm_path");
+ goto error;
+ }
+
+ ret = lttng_set_session_shm_path(session_name, shm_path);
+ if (ret < 0) {
+ lttng_destroy_session(session_name);
+ goto error;
+ }
+ }
+
MSG("Session %s created.", session_name);
if (print_str_url && !opt_snapshot) {
MSG("Traces will be written in %s", print_str_url);
MSG("Snapshot mode set. Every channel enabled for that session will "
"be set in overwrite mode and mmap output.");
}
+ if (opt_shm_path) {
+ MSG("Session %s set to shm_path: %s.", session_name,
+ shm_path);
+ }
/* Mi output */
if (lttng_opt_mi) {
goto end;
}
- if (opt_disable_consumer) {
- MSG("The option --disable-consumer is obsolete.");
- ret = CMD_WARNING;
- goto end;
- }
-
-
/* MI initialization */
if (lttng_opt_mi) {
writer = mi_lttng_writer_create(fileno(stdout), lttng_opt_mi);