summaryrefslogtreecommitdiffstats
path: root/testsuite/systemtap.base/utrace_p5_multi.c
diff options
context:
space:
mode:
authorDavid Smith <dsmith@redhat.com>2008-06-11 10:37:32 -0500
committerDavid Smith <dsmith@redhat.com>2008-06-11 11:19:26 -0500
commit1461de23ee84384940626145f07b0a736a2d8bb3 (patch)
tree33f7f61be6c6a1d908164784812b575ed55f84a5 /testsuite/systemtap.base/utrace_p5_multi.c
parentf2782fe588397a5baa313eb825dd4c508818dc7e (diff)
downloadsystemtap-steved-1461de23ee84384940626145f07b0a736a2d8bb3.tar.gz
systemtap-steved-1461de23ee84384940626145f07b0a736a2d8bb3.tar.xz
systemtap-steved-1461de23ee84384940626145f07b0a736a2d8bb3.zip
Added .thread.begin and .thread.end utrace probe tests.
2008-06-11 David Smith <dsmith@redhat.com> * systemtap.base/utrace_p5.exp: Added 'process().thread.begin' and 'process().thread.end' tests. * systemtap.base/utrace_p5_multi.c: Added multi-threaded test program for utrace_p5.exp. * .gitignore: Updated.
Diffstat (limited to 'testsuite/systemtap.base/utrace_p5_multi.c')
-rw-r--r--testsuite/systemtap.base/utrace_p5_multi.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/testsuite/systemtap.base/utrace_p5_multi.c b/testsuite/systemtap.base/utrace_p5_multi.c
new file mode 100644
index 00000000..03c6eea0
--- /dev/null
+++ b/testsuite/systemtap.base/utrace_p5_multi.c
@@ -0,0 +1,39 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+void *thread_function( void *ptr );
+
+int
+main()
+{
+ pthread_t thread1, thread2;
+ int iret1, iret2;
+
+ /* Create independent threads each of which will execute function */
+ iret1 = pthread_create(&thread1, NULL, thread_function, (void*) 1);
+ iret2 = pthread_create(&thread2, NULL, thread_function, (void*) 2);
+
+ /* Wait till threads are complete before main continues. Unless we
+ * wait we run the risk of executing an exit which will terminate
+ * the process and all threads before the threads have
+ * completed. */
+ pthread_join(thread1, NULL);
+ pthread_join(thread2, NULL);
+
+ printf("Thread 1 returns: %d\n", iret1);
+ printf("Thread 2 returns: %d\n", iret2);
+ exit(0);
+}
+
+void *thread_function(void *ptr)
+{
+ int tnum = (int)ptr;
+ if (tnum == 1) {
+ int fd = open("/dev/null", O_RDONLY);
+ close(fd);
+ }
+}