]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Update.
authorUlrich Drepper <drepper@redhat.com>
Mon, 4 Aug 2003 21:53:09 +0000 (21:53 +0000)
committerUlrich Drepper <drepper@redhat.com>
Mon, 4 Aug 2003 21:53:09 +0000 (21:53 +0000)
2003-08-03  Jakub Jelinek  <jakub@redhat.com>

* sysdeps/pthread/createthread.c (do_clone): Move error handling
to first syscall error check.  Move syscall error check for tkill
into __ASSUME_CLONE_STOPPED #ifdef.

nptl/ChangeLog
nptl/sysdeps/pthread/createthread.c

index a8b7d743c09a7121c26604396e989f4821c0845c..d68c12e274fb162bd4a6547793be9353c8971fe6 100644 (file)
@@ -1,3 +1,9 @@
+2003-08-03  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/pthread/createthread.c (do_clone): Move error handling
+       to first syscall error check.  Move syscall error check for tkill
+       into __ASSUME_CLONE_STOPPED #ifdef.
+
 2003-08-02  Ulrich Drepper  <drepper@redhat.com>
 
        * sysdeps/pthread/createthread.c (do_clone): If __ASSUME_CLONE_STOPPED
index 23012bb476c91a42f8b5166026e3d64d6812c286..373a21fe6eca878cde5d19789ef249e09ca8278f 100644 (file)
@@ -88,7 +88,20 @@ do_clone (struct pthread *pd, const struct pthread_attr *attr,
                                  sizeof (cpu_set_t), attr->cpuset);
 
          if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (res, err), 0))
-           goto err_out;
+           {
+             /* The operation failed.  We have to kill the thread.  First
+                send it the cancellation signal.  */
+             INTERNAL_SYSCALL_DECL (err2);
+           err_out:
+             (void) INTERNAL_SYSCALL (tkill, err2, 2, pd->tid, SIGCANCEL);
+
+#ifdef __ASSUME_CLONE_STOPPED
+             /* Then wake it up so that the signal can be processed.  */
+             (void) INTERNAL_SYSCALL (tkill, err2, 2, pd->tid, SIGCONT);
+#endif
+
+             return INTERNAL_SYSCALL_ERRNO (res, err);
+           }
        }
 
       /* Set the scheduling parameters.  */
@@ -104,24 +117,11 @@ do_clone (struct pthread *pd, const struct pthread_attr *attr,
 #ifdef __ASSUME_CLONE_STOPPED
       /* Now start the thread for real.  */
       res = INTERNAL_SYSCALL (tkill, err, 2, pd->tid, SIGCONT);
-#endif
 
       /* If something went wrong, kill the thread.  */
       if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (res, err), 0))
-       {
-         /* The operation failed.  We have to kill the thread.  First
-             send it the cancellation signal.  */
-         INTERNAL_SYSCALL_DECL (err2);
-       err_out:
-         (void) INTERNAL_SYSCALL (tkill, err2, 2, pd->tid, SIGCANCEL);
-
-#ifdef __ASSUME_CLONE_STOPPED
-         /* Then wake it up so that the signal can be processed.  */
-         (void) INTERNAL_SYSCALL (tkill, err2, 2, pd->tid, SIGCONT);
+       goto err_out;
 #endif
-
-         return INTERNAL_SYSCALL_ERRNO (res, err);
-       }
     }
 
   /* We now have for sure more than one thread.  The main thread might