snprintf(identifier_name, PATH_MAX-1, "%lu.%lu.%llu",
traced_tid, traced_pid, get_cycles());
snprintf(outfile_name, PATH_MAX-1, "process-%s", identifier_name);
+
+ /* Wait for the first signal before creating files */
+ ret = sigsuspend(&oldset);
+ if(ret != -1) {
+ perror("LTT Error in sigsuspend\n");
+ }
+ if(traced_pid == 0 || parent_exited) goto dead_parent;
+
#ifndef LTT_NULL_OUTPUT_TEST
fd_process = creat(outfile_name, 0644);
#else
#endif //LTT_NULL_OUTPUT_TEST
while(1) {
- ret = sigsuspend(&oldset);
- if(ret != -1) {
- perror("LTT Error in sigsuspend\n");
- }
-
if(traced_pid == 0) break; /* parent died */
if(parent_exited) break;
dbg_printf("LTT Doing a buffer switch read. pid is : %lu\n", getpid());
do {
ret = read_subbuffer(&shared_trace_info->channel.process, fd_process);
} while(ret == 0);
+ ret = sigsuspend(&oldset);
+ if(ret != -1) {
+ perror("LTT Error in sigsuspend\n");
+ }
}
-
+dead_parent:
/* The parent thread is dead and we have finished with the buffer */
/* Buffer force switch (flush). Using FLUSH instead of ACTIVE because we know
void *thr1(void *arg)
{
+ int i;
ltt_thread_init(); /* This init is not required : it will be done
automatically anyways at the first tracing call site */
printf("thread 1, thread id : %lu, pid %lu\n", pthread_self(), getpid());
- while(1) {
+ for(i=0; i<100000; i++) {
trace_user_generic_string("Hello world! Have a nice day.");
- sleep(2);
}
pthread_exit((void*)1);
}
/* Example of a _bad_ thread, which still works with the tracing */
void *thr2(void *arg)
{
+ int i;
/* See ? no init */
printf("thread 2, thread id : %lu, pid %lu\n", pthread_self(), getpid());
- sleep(1);
- while(1) {
+
+ for(i=0; i<100000; i++) {
trace_user_generic_string("Hello world! Have a nice day.");
- sleep(2);
}
/* This thread is a bad citizen : returning like this will cause its cancel
* routines not to be executed. This is still detected by the tracer, but only
void *tret;
printf("Will trace the following string : Hello world! Have a nice day.\n");
- printf("Press CTRL-C to stop.\n");
- printf("No file is created with this example : it logs through a kernel\n");
- printf("system call. See the LTTng lttctl command to start tracing.\n\n");
+ printf("It will stop automatically.\n");
+ printf("See the result file in /tmp/ltt-usertrace.\n");
printf("thread main, thread id : %lu, pid %lu\n", pthread_self(), getpid());
err = pthread_create(&tid1, NULL, thr1, NULL);