2002-11-25 Robert Collins <rbtcollins@hotmail.com>
* readme: Document running portions of the test suite (Thanks Egor!). * winsup.api/pthread/mainthreadexits.c: New file, derived from Thomas Pfaff's test cases. * winsup.api/pthread/threadidafterfork.c: Ditto.
This commit is contained in:
47
winsup/testsuite/winsup.api/pthread/mainthreadexits.c
Normal file
47
winsup/testsuite/winsup.api/pthread/mainthreadexits.c
Normal file
@@ -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>
|
||||
|
||||
*/
|
Reference in New Issue
Block a user