2002-11-24 21:41:36 +08:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <pthread.h>
|
2003-01-24 05:21:28 +08:00
|
|
|
#include <stdlib.h>
|
2002-11-24 21:41:36 +08:00
|
|
|
|
|
|
|
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>
|
|
|
|
|
|
|
|
*/
|