diff options
Diffstat (limited to 'Python')
-rw-r--r-- | Python/bltinmodule.c | 3 | ||||
-rw-r--r-- | Python/ceval.c | 2 | ||||
-rw-r--r-- | Python/pythonrun.c | 3 | ||||
-rw-r--r-- | Python/thread_pthread.h | 11 |
4 files changed, 5 insertions, 14 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 3604601..10e59c9 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -1589,7 +1589,8 @@ builtin_raw_input(PyObject *self, PyObject *args) prompt); Py_XDECREF(po); if (s == NULL) { - PyErr_SetNone(PyExc_KeyboardInterrupt); + if (!PyErr_Occurred()) + PyErr_SetNone(PyExc_KeyboardInterrupt); return NULL; } if (*s == '\0') { diff --git a/Python/ceval.c b/Python/ceval.c index 0c3a93d..39b7633 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -318,7 +318,7 @@ static volatile int things_to_do = 0; int Py_AddPendingCall(int (*func)(void *), void *arg) { - static int busy = 0; + static volatile int busy = 0; int i, j; /* XXX Begin critical section */ /* XXX If you want this to be safe against nested diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 113ff2d..d89e5e9 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -1435,7 +1435,8 @@ err_input(perrdetail *err) msg = "EOL while scanning single-quoted string"; break; case E_INTR: - PyErr_SetNone(PyExc_KeyboardInterrupt); + if (!PyErr_Occurred()) + PyErr_SetNone(PyExc_KeyboardInterrupt); Py_XDECREF(v); return; case E_NOMEM: diff --git a/Python/thread_pthread.h b/Python/thread_pthread.h index d18d2de..dd1616c 100644 --- a/Python/thread_pthread.h +++ b/Python/thread_pthread.h @@ -119,7 +119,6 @@ PyThread_start_new_thread(void (*func)(void *), void *arg) { pthread_t th; int status; - sigset_t oldmask, newmask; #if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED) pthread_attr_t attrs; #endif @@ -137,13 +136,6 @@ PyThread_start_new_thread(void (*func)(void *), void *arg) pthread_attr_setscope(&attrs, PTHREAD_SCOPE_SYSTEM); #endif - /* Mask all signals in the current thread before creating the new - * thread. This causes the new thread to start with all signals - * blocked. - */ - sigfillset(&newmask); - SET_THREAD_SIGMASK(SIG_BLOCK, &newmask, &oldmask); - status = pthread_create(&th, #if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED) &attrs, @@ -154,9 +146,6 @@ PyThread_start_new_thread(void (*func)(void *), void *arg) (void *)arg ); - /* Restore signal mask for original thread */ - SET_THREAD_SIGMASK(SIG_SETMASK, &oldmask, NULL); - #if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED) pthread_attr_destroy(&attrs); #endif |