X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;ds=sidebyside;f=tests%2Ffork%2Ffork.c;h=0d2906901e4ccb1b8ab0320bd3e610253b9d9157;hb=9d36f30e825135d8fbb3ba6cb31ab10aa938b135;hp=20a08779f367cc413d2da769c0b25853797f90ec;hpb=48c56fcfaec23b51b49cbafb745b1638f8594068;p=lttng-ust.git diff --git a/tests/fork/fork.c b/tests/fork/fork.c index 20a08779..0d290690 100644 --- a/tests/fork/fork.c +++ b/tests/fork/fork.c @@ -1,31 +1,63 @@ +/* + * Copyright (C) 2009 Pierre-Marc Fournier + * Copyright (C) 2011 Mathieu Desnoyers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; version 2.1 of + * the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + #include #include +#include +#include -#include "marker.h" - +#define TRACEPOINT_DEFINE +#define TRACEPOINT_CREATE_PROBES +#include "ust_tests_fork.h" -int main() +int main(int argc, char **argv, char *env[]) { int result; - printf("Fork test program\n"); - trace_mark(ust, before_fork, MARK_NOARGS); + if (argc < 2) { + fprintf(stderr, "usage: fork PROG_TO_EXEC\n"); + exit(1); + } - sleep(5); + printf("Fork test program, parent pid is %d\n", getpid()); + tracepoint(ust_tests_fork, before_fork); result = fork(); - if(result == -1) { + if (result == -1) { perror("fork"); return 1; } - if(result == 0) { - trace_mark(ust, after_fork_child, MARK_NOARGS); - } - else { - trace_mark(ust, after_fork_parent, MARK_NOARGS); + if (result == 0) { + char *args[] = { "fork2", NULL }; + + printf("Child pid is %d\n", getpid()); + + tracepoint(ust_tests_fork, after_fork_child, getpid()); + + result = execve(argv[1], args, env); + if (result == -1) { + perror("execve"); + return 1; + } + } else { + tracepoint(ust_tests_fork, after_fork_parent); } return 0; } - -MARKER_LIB;