]> granicus.if.org Git - python/commitdiff
Patch #716969: Detect thread creation failure. Will backport to 2.2.
authorMartin v. Löwis <martin@v.loewis.de>
Sat, 19 Apr 2003 07:44:52 +0000 (07:44 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Sat, 19 Apr 2003 07:44:52 +0000 (07:44 +0000)
Python/thread_pthread.h
Python/thread_solaris.h

index 2596af55c60c12a6a5f4e55eb47e13e2633fb8b9..2e594fe922e16a679a74f217418105fd4feb76c8 100644 (file)
@@ -188,7 +188,7 @@ long
 PyThread_start_new_thread(void (*func)(void *), void *arg)
 {
        pthread_t th;
-       int success;
+       int status;
        sigset_t oldmask, newmask;
 #if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
        pthread_attr_t attrs;
@@ -214,7 +214,7 @@ PyThread_start_new_thread(void (*func)(void *), void *arg)
        sigfillset(&newmask);
        SET_THREAD_SIGMASK(SIG_BLOCK, &newmask, &oldmask);
 
-       success = pthread_create(&th, 
+       status = pthread_create(&th, 
 #if defined(PY_PTHREAD_D4)
                                 pthread_attr_default,
                                 (pthread_startroutine_t)func, 
@@ -244,13 +244,15 @@ PyThread_start_new_thread(void (*func)(void *), void *arg)
 #if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
        pthread_attr_destroy(&attrs);
 #endif
-       if (success == 0) {
+       if (status != 0)
+            return -1;
+
 #if defined(PY_PTHREAD_D4) || defined(PY_PTHREAD_D6) || defined(PY_PTHREAD_D7)
-               pthread_detach(&th);
+        pthread_detach(&th);
 #elif defined(PY_PTHREAD_STD)
-               pthread_detach(th);
+        pthread_detach(th);
 #endif
-       }
+
 #if SIZEOF_PTHREAD_T <= SIZEOF_LONG
        return (long) th;
 #else
index d3512d4eca08587183f1a297ecfe10ddbe62f833..ff3e6f3591c778963f6db42814261ab4551e977c 100644 (file)
@@ -40,8 +40,6 @@ PyThread_start_new_thread(void (*func)(void *), void *arg)
 {
        thread_t tid;
        struct func_arg *funcarg;
-       int success = 0;        /* init not needed when SOLARIS_THREADS and */
-                               /* C_THREADS implemented properly */
 
        dprintf(("PyThread_start_new_thread called\n"));
        if (!initialized)
@@ -53,7 +51,7 @@ PyThread_start_new_thread(void (*func)(void *), void *arg)
                       THR_DETACHED | THR_NEW_LWP, &tid)) {
                perror("thr_create");
                free((void *) funcarg);
-               success = -1;
+               return -1;
        }
        return tid;
 }