diff options
Diffstat (limited to 'winsup/testsuite/winsup.api/pthread/mainthreadexits.c')
-rw-r--r-- | winsup/testsuite/winsup.api/pthread/mainthreadexits.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/winsup/testsuite/winsup.api/pthread/mainthreadexits.c b/winsup/testsuite/winsup.api/pthread/mainthreadexits.c new file mode 100644 index 000000000..dbd6969dd --- /dev/null +++ b/winsup/testsuite/winsup.api/pthread/mainthreadexits.c @@ -0,0 +1,47 @@ +#include <stdio.h> +#include <unistd.h> +#include <pthread.h> + +static void * Thread (void *); + +static pthread_t main_thread; +static pthread_t secondThread; +static int result = 2; + +int main(void) +{ + main_thread = pthread_self (); + + if (pthread_create (&secondThread, NULL, Thread, NULL)) + exit (1); + sleep (5); + pthread_exit (&result); + /* If pthread_exit doesm't (which would be a bug) then we do */ + return 1; +} + +static void * Thread (void *not_used) +{ + void *myresult; + /* We should be able to join this */ + if (pthread_join (main_thread, &myresult)) + exit (1); + + if (*(int *)myresult != 2) + exit (1); + + exit (0); +} +/* +This valid code doesn't work at all. The mainthread object in MTinterface +is not properly initialized, the cancel_event is NULL and the win32_obj_id +is NULL because myself->hProcess is NULL when MTinterface is initialized +(and i don't think that a process handle can be used as thread handle). +Even if the handles would be valid the pthread_join call would try to +delete a thread object that is created static which would result in a +corrupted heap. + +Concept test Contributed by Thomas Pfaff <tpfaff@gmx.net> +Scriptable test by Robert Collins <rbtcollins@hotmail.com> + +*/ |