mirror of
https://github.com/python/cpython
synced 2024-07-21 18:25:47 +00:00
Patch #716969: Detect thread creation failure. Will backport to 2.2.
This commit is contained in:
parent
1e91d8eb03
commit
910ae6283a
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue