Sat Apr 14 17:04:00 2001 Robert Collins <rbtcollins@hotmail.com>
* thread.h (MTinterface): Add threadcount. * thread.cc (MTinterface::Init): Set threadcount to 1. (__pthread_create): Increment threadcount. (__pthread_exit): Decrement threadcount and call exit() from the last thread.
This commit is contained in:
parent
a25b8414ac
commit
e6b98fc8d6
|
@ -1,3 +1,10 @@
|
|||
Sat Apr 14 17:04:00 2001 Robert Collins <rbtcollins@hotmail.com>
|
||||
|
||||
* thread.h (MTinterface): Add threadcount.
|
||||
* thread.cc (MTinterface::Init): Set threadcount to 1.
|
||||
(__pthread_create): Increment threadcount.
|
||||
(__pthread_exit): Decrement threadcount and call exit() from the last thread.
|
||||
|
||||
Fri Apr 13 11:34:24 2001 Robert Collins <rbtcollins@hotmail.com>
|
||||
|
||||
* fork.cc (fork_child): Call the __pthread_atforkchild function.
|
||||
|
|
|
@ -291,6 +291,7 @@ MTinterface::Init (int forked)
|
|||
}
|
||||
|
||||
concurrency = 0;
|
||||
threadcount = 1; /* 1 current thread when Init occurs.*/
|
||||
|
||||
if (forked)
|
||||
return;
|
||||
|
@ -664,6 +665,7 @@ __pthread_create (pthread_t * thread, const pthread_attr_t * attr,
|
|||
*thread = NULL;
|
||||
return EAGAIN;
|
||||
}
|
||||
InterlockedIncrement(&MT_INTERFACE->threadcount);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1214,10 +1216,12 @@ __pthread_exit (void *value_ptr)
|
|||
class pthread *thread = __pthread_self ();
|
||||
|
||||
MT_INTERFACE->destructors.IterateNull ();
|
||||
// FIXME: run the destructors of thread_key items here
|
||||
|
||||
thread->return_ptr = value_ptr;
|
||||
ExitThread (0);
|
||||
if (InterlockedDecrement(&MT_INTERFACE->threadcount) == 0)
|
||||
exit (0);
|
||||
else
|
||||
ExitThread (0);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
@ -333,6 +333,7 @@ public:
|
|||
/* we may get 0 for the Tls index.. grrr */
|
||||
int indexallocated;
|
||||
int concurrency;
|
||||
long int threadcount;
|
||||
|
||||
// Used for main thread data, and sigproc thread
|
||||
struct __reent_t reents;
|
||||
|
@ -346,7 +347,7 @@ public:
|
|||
|
||||
void Init (int);
|
||||
|
||||
MTinterface ():reent_index (0), indexallocated (0)
|
||||
MTinterface ():reent_index (0), indexallocated (0), threadcount (1)
|
||||
{
|
||||
pthread_prepare = NULL;
|
||||
pthread_child = NULL;
|
||||
|
|
Loading…
Reference in New Issue