]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
(pthread_exit): Set __pthread_last_event.
authorUlrich Drepper <drepper@redhat.com>
Wed, 10 Nov 1999 05:03:07 +0000 (05:03 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 10 Nov 1999 05:03:07 +0000 (05:03 +0000)
(pthread_exit): Signal event if this is wanted.

linuxthreads/join.c

index 42eb033746f659ec2374595719af1e151c2d48e5..71db541391b922d43ff56f13c4bdbaef6ef0c2c4 100644 (file)
@@ -39,6 +39,27 @@ void pthread_exit(void * retval)
   THREAD_SETMEM(self, p_retval, retval);
   /* Say that we've terminated */
   THREAD_SETMEM(self, p_terminated, 1);
+  /* See whether we have to signal the death.  */
+  if (THREAD_GETMEM(self, p_report_events))
+    {
+      /* See whether TD_DEATH is in any of the mask.  */
+      int idx = __td_eventword (TD_DEATH);
+      uint32_t mask = __td_eventmask (TD_DEATH);
+
+      if ((mask & (__pthread_threads_events.event_bits[idx]
+                  | THREAD_GETMEM(self,
+                                  p_eventbuf.eventmask).event_bits[idx]))
+         != 0)
+       {
+         /* Yep, we have to signal the death.  */
+         THREAD_SETMEM(self, p_eventbuf.eventnum, TD_DEATH);
+         THREAD_SETMEM(self, p_eventbuf.eventdata, self);
+         __pthread_last_event = self;
+
+         /* Now call the function to signal the event.  */
+         __linuxthreads_death_event();
+       }
+    }
   /* See if someone is joining on us */
   joining = THREAD_GETMEM(self, p_joining);
   __pthread_unlock(THREAD_GETMEM(self, p_lock));