Commit f070cfd2 authored by Martin v. Löwis's avatar Martin v. Löwis

Patch #716969: Detect thread creation failure. Will backport to 2.2.

parent 2c46a572
...@@ -188,7 +188,7 @@ long ...@@ -188,7 +188,7 @@ long
PyThread_start_new_thread(void (*func)(void *), void *arg) PyThread_start_new_thread(void (*func)(void *), void *arg)
{ {
pthread_t th; pthread_t th;
int success; int status;
sigset_t oldmask, newmask; sigset_t oldmask, newmask;
#if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED) #if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
pthread_attr_t attrs; pthread_attr_t attrs;
...@@ -214,7 +214,7 @@ PyThread_start_new_thread(void (*func)(void *), void *arg) ...@@ -214,7 +214,7 @@ PyThread_start_new_thread(void (*func)(void *), void *arg)
sigfillset(&newmask); sigfillset(&newmask);
SET_THREAD_SIGMASK(SIG_BLOCK, &newmask, &oldmask); SET_THREAD_SIGMASK(SIG_BLOCK, &newmask, &oldmask);
success = pthread_create(&th, status = pthread_create(&th,
#if defined(PY_PTHREAD_D4) #if defined(PY_PTHREAD_D4)
pthread_attr_default, pthread_attr_default,
(pthread_startroutine_t)func, (pthread_startroutine_t)func,
...@@ -244,13 +244,15 @@ PyThread_start_new_thread(void (*func)(void *), void *arg) ...@@ -244,13 +244,15 @@ PyThread_start_new_thread(void (*func)(void *), void *arg)
#if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED) #if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
pthread_attr_destroy(&attrs); pthread_attr_destroy(&attrs);
#endif #endif
if (success == 0) { if (status != 0)
return -1;
#if defined(PY_PTHREAD_D4) || defined(PY_PTHREAD_D6) || defined(PY_PTHREAD_D7) #if defined(PY_PTHREAD_D4) || defined(PY_PTHREAD_D6) || defined(PY_PTHREAD_D7)
pthread_detach(&th); pthread_detach(&th);
#elif defined(PY_PTHREAD_STD) #elif defined(PY_PTHREAD_STD)
pthread_detach(th); pthread_detach(th);
#endif #endif
}
#if SIZEOF_PTHREAD_T <= SIZEOF_LONG #if SIZEOF_PTHREAD_T <= SIZEOF_LONG
return (long) th; return (long) th;
#else #else
......
...@@ -40,8 +40,6 @@ PyThread_start_new_thread(void (*func)(void *), void *arg) ...@@ -40,8 +40,6 @@ PyThread_start_new_thread(void (*func)(void *), void *arg)
{ {
thread_t tid; thread_t tid;
struct func_arg *funcarg; 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")); dprintf(("PyThread_start_new_thread called\n"));
if (!initialized) if (!initialized)
...@@ -53,7 +51,7 @@ PyThread_start_new_thread(void (*func)(void *), void *arg) ...@@ -53,7 +51,7 @@ PyThread_start_new_thread(void (*func)(void *), void *arg)
THR_DETACHED | THR_NEW_LWP, &tid)) { THR_DETACHED | THR_NEW_LWP, &tid)) {
perror("thr_create"); perror("thr_create");
free((void *) funcarg); free((void *) funcarg);
success = -1; return -1;
} }
return tid; return tid;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment