X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttctl%2Flttctl.c;h=a2d933d3341501e6c64f1de308d7a9cfc68c339a;hb=b56dcdf2c3128db9165e0de6476ca5b799338486;hp=1eeb1b1201adeb7b1fbca5c86653252b83a5d596;hpb=5adba60f59d60999ea41b075c121301165308bff;p=lttv.git diff --git a/ltt/branches/poly/lttctl/lttctl.c b/ltt/branches/poly/lttctl/lttctl.c index 1eeb1b12..a2d933d3 100644 --- a/ltt/branches/poly/lttctl/lttctl.c +++ b/ltt/branches/poly/lttctl/lttctl.c @@ -8,6 +8,10 @@ * Mathieu Desnoyers */ +#ifdef HAVE_CONFIG_H +#include +#endif + #include #include #include @@ -27,14 +31,19 @@ enum trace_ctl_op { static char *trace_name = NULL; static char *mode_name = NULL; +static unsigned subbuf_size = 0; +static unsigned n_subbufs = 0; static enum trace_mode mode = LTT_TRACE_NORMAL; static enum trace_ctl_op op = CTL_OP_NONE; static char *channel_root = NULL; static char *trace_root = NULL; +static int sigio_received = 0; + void handler(int signo) { printf("signal %d received\n", signo); + sigio_received = 1; } @@ -57,6 +66,8 @@ void show_arguments(void) printf(" (optionnaly, you can set LTT_DAEMON env. var.)\n"); printf("-t Trace root path. (ex. /root/traces/example_trace)\n"); printf("-l LTT channels root path. (ex. /mnt/relayfs/ltt)\n"); + printf("-z Size of the subbuffers (will be rounded to next page size)\n"); + printf("-x Number of subbuffers\n"); printf("\n"); } @@ -110,7 +121,7 @@ int parse_arguments(int argc, char **argv) ret = -1; } } else { - printf("Specify a mode after -c.\n", argv[argn]); + printf("Specify a mode after -c.\n"); printf("\n"); ret = -1; } @@ -124,6 +135,26 @@ int parse_arguments(int argc, char **argv) case 'q': op = CTL_OP_STOP; break; + case 'z': + if(argn+1 < argc) { + subbuf_size = (unsigned)atoi(argv[argn+1]); + argn++; + } else { + printf("Specify a number of subbuffers after -z.\n"); + printf("\n"); + ret = -1; + } + break; + case 'x': + if(argn+1 < argc) { + n_subbufs = (unsigned)atoi(argv[argn+1]); + argn++; + } else { + printf("Specify a subbuffer size after -x.\n"); + printf("\n"); + ret = -1; + } + break; case 'd': op = CTL_OP_DAEMON; break; @@ -132,7 +163,7 @@ int parse_arguments(int argc, char **argv) trace_root = argv[argn+1]; argn++; } else { - printf("Specify a trace root path after -t.\n", argv[argn]); + printf("Specify a trace root path after -t.\n"); printf("\n"); ret = -1; } @@ -142,7 +173,7 @@ int parse_arguments(int argc, char **argv) channel_root = argv[argn+1]; argn++; } else { - printf("Specify a channel root path after -l.\n", argv[argn]); + printf("Specify a channel root path after -l.\n"); printf("\n"); ret = -1; } @@ -212,7 +243,7 @@ int lttctl_daemon(struct lttctl_handle *handle, char *trace_name) strcat(channel_path, trace_name); - ret = lttctl_create_trace(handle, trace_name, mode); + ret = lttctl_create_trace(handle, trace_name, mode, subbuf_size, n_subbufs); if(ret != 0) goto create_error; act.sa_handler = handler; @@ -220,12 +251,13 @@ int lttctl_daemon(struct lttctl_handle *handle, char *trace_name) sigaddset(&(act.sa_mask), SIGIO); sigaction(SIGIO, &act, NULL); + sigio_received = 0; + pid = fork(); if(pid > 0) { - //sleep(1); /* parent */ - pause(); + while(!sigio_received) pause(); /* Now the trace is created, go on and create the supplementary files... */ printf("Creating supplementary trace files\n"); @@ -275,8 +307,8 @@ int main(int argc, char ** argv) switch(op) { case CTL_OP_CREATE: - ret = lttctl_create_trace(handle, trace_name, mode); - break; + ret = lttctl_create_trace(handle, trace_name, mode, subbuf_size, + n_subbufs); case CTL_OP_DESTROY: ret = lttctl_destroy_trace(handle, trace_name); break;