about summary refs log tree commit diff
path: root/nptl/pthread_create.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-09-24 07:18:48 +0000
committerUlrich Drepper <drepper@redhat.com>2004-09-24 07:18:48 +0000
commit362038b0cab33f8e61ada54aaaf4312e44a0922b (patch)
treefa5a5c729c0160ef441981e4ecb66ec381cb8fe8 /nptl/pthread_create.c
parent8f1913a918177f148909281322f2f0638472fed3 (diff)
downloadglibc-362038b0cab33f8e61ada54aaaf4312e44a0922b.tar.gz
glibc-362038b0cab33f8e61ada54aaaf4312e44a0922b.tar.xz
glibc-362038b0cab33f8e61ada54aaaf4312e44a0922b.zip
Update.
2004-09-23  Kaz Kojima  <kkojima@rr.iij4u.or.jp>

	* sysdeps/unix/sysv/linux/sh/sysdep.h (INTERNAL_SYSCALL_NCS): Define.
Diffstat (limited to 'nptl/pthread_create.c')
-rw-r--r--nptl/pthread_create.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c
index 160656863d..14306867c9 100644
--- a/nptl/pthread_create.c
+++ b/nptl/pthread_create.c
@@ -227,11 +227,6 @@ start_thread (void *arg)
 
   struct pthread *pd = (struct pthread *) arg;
 
-  /* Get the lock the parent locked to force synchronization.  */
-  lll_lock (pd->lock);
-  /* And give it up right away.  */
-  lll_unlock (pd->lock);
-
 #if HP_TIMING_AVAIL
   /* Remember the time when the thread was started.  */
   hp_timing_t now;
@@ -257,6 +252,15 @@ start_thread (void *arg)
       /* Store the new cleanup handler info.  */
       THREAD_SETMEM (pd, cleanup_jmp_buf, &unwind_buf);
 
+      int oldtype = CANCEL_ASYNC ();
+
+      /* Get the lock the parent locked to force synchronization.  */
+      lll_lock (pd->lock);
+      /* And give it up right away.  */
+      lll_unlock (pd->lock);
+
+      CANCEL_RESET (oldtype);
+
       /* Run the code the user provided.  */
 #ifdef CALL_THREAD_FCT
       THREAD_SETMEM (pd, result, CALL_THREAD_FCT (pd));