Define __nptl_nthreads
authordrepper <drepper>
Fri, 14 Feb 2003 23:19:47 +0000 (23:19 +0000)
committerdrepper <drepper>
Fri, 14 Feb 2003 23:19:47 +0000 (23:19 +0000)
(start_thread): Increment __nptl_nthreads at beginning.  Decrement after
thread is done.  If Then zero call exit(0).

nptl/pthread_create.c

index 2b33243..c96a281 100644 (file)
@@ -44,6 +44,9 @@ static td_thr_events_t __nptl_threads_events;
 /* Pointer to descriptor with the last event.  */
 static struct pthread *__nptl_last_event;
 
+/* Number of threads running.  */
+unsigned int __nptl_nthreads = 1;
+
 
 /* Code to allocate and deallocate a stack.  */
 #define DEFINE_DEALLOC
@@ -197,6 +200,9 @@ __free_tcb (struct pthread *pd)
 static int
 start_thread (void *arg)
 {
+  /* One more thread.  */
+  atomic_increment (&__nptl_nthreads);
+
   struct pthread *pd = (struct pthread *) arg;
 
 #if HP_TIMING_AVAIL
@@ -215,6 +221,14 @@ start_thread (void *arg)
     }
 
 
+  /* If this is the last thread we terminate the process now.  We
+     do not notify the debugger, it might just irritate it if there
+     is no thread left.  */
+  if (atomic_decrement_and_test (&__nptl_nthreads))
+    /* This was the last thread.  */
+    exit (0);
+
+
   /* Report the death of the thread if this is wanted.  */
   if (__builtin_expect (pd->report_events, 0))
     {