Make sure the singal is delivered to the main thread, where python

runs its signal handlers, not to a random thread that happens to be
executing at the time when signal arrives. This functionality has been
lost since Python 2.3, possible cause is that the linux implementation
of POSIX threads always delivered signal to the main thread. This
bug results in rather annoying inability to terminate threading script
with ^C for example and there could be other issues as well.

Bump PORTREVISION.

PR:		ports/131080
Submitted by:	Andriy Pylypenko <bamby@sippysoft.com>
Approved by:	MAINTAINER's timeout
This commit is contained in:
Maxim Sobolev 2009-02-27 01:25:32 +00:00
parent 9fac048015
commit f4711ece62
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=229118
8 changed files with 124 additions and 3 deletions

View File

@ -7,7 +7,7 @@
PORTNAME= python24
PORTVERSION= 2.4.5
PORTREVISION= 2
PORTREVISION= 3
CATEGORIES= lang python ipv6
MASTER_SITES= ${PYTHON_MASTER_SITES}
MASTER_SITE_SUBDIR= ${PYTHON_MASTER_SITE_SUBDIR}

View File

@ -0,0 +1,30 @@
$FreeBSD$
--- Python/thread_pthread.h
+++ Python/thread_pthread.h
@@ -149,6 +149,7 @@
{
pthread_t th;
int status;
+ sigset_t set, oset;
#if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
pthread_attr_t attrs;
#endif
@@ -177,6 +178,8 @@
#if defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
pthread_attr_setscope(&attrs, PTHREAD_SCOPE_SYSTEM);
#endif
+ sigfillset(&set);
+ SET_THREAD_SIGMASK(SIG_BLOCK, &set, &oset);
status = pthread_create(&th,
#if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
@@ -188,6 +191,7 @@
(void *)arg
);
+ SET_THREAD_SIGMASK(SIG_SETMASK, &oset, NULL);
#if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
pthread_attr_destroy(&attrs);
#endif

View File

@ -6,6 +6,7 @@
PORTNAME= python25
PORTVERSION= 2.5.4
PORTREVISION= 1
CATEGORIES= lang python ipv6
MASTER_SITES= ${PYTHON_MASTER_SITES}
MASTER_SITE_SUBDIR= ${PYTHON_MASTER_SITE_SUBDIR}

View File

@ -0,0 +1,30 @@
$FreeBSD$
--- ../Python/thread_pthread.h
+++ ../Python/thread_pthread.h
@@ -149,6 +149,7 @@
{
pthread_t th;
int status;
+ sigset_t set, oset;
#if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
pthread_attr_t attrs;
#endif
@@ -177,6 +178,8 @@
#if defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
pthread_attr_setscope(&attrs, PTHREAD_SCOPE_SYSTEM);
#endif
+ sigfillset(&set);
+ SET_THREAD_SIGMASK(SIG_BLOCK, &set, &oset);
status = pthread_create(&th,
#if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
@@ -188,6 +191,7 @@
(void *)arg
);
+ SET_THREAD_SIGMASK(SIG_SETMASK, &oset, NULL);
#if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
pthread_attr_destroy(&attrs);
#endif

View File

@ -6,7 +6,7 @@
PORTNAME= python26
PORTVERSION= 2.6.1
PORTREVISION= 1
PORTREVISION= 2
CATEGORIES= lang python ipv6
MASTER_SITES= ${PYTHON_MASTER_SITES}
MASTER_SITE_SUBDIR= ${PYTHON_MASTER_SITE_SUBDIR}

View File

@ -0,0 +1,30 @@
$FreeBSD$
--- Python/thread_pthread.h
+++ Python/thread_pthread.h
@@ -149,6 +149,7 @@
{
pthread_t th;
int status;
+ sigset_t set, oset;
#if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
pthread_attr_t attrs;
#endif
@@ -177,6 +178,8 @@
#if defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
pthread_attr_setscope(&attrs, PTHREAD_SCOPE_SYSTEM);
#endif
+ sigfillset(&set);
+ SET_THREAD_SIGMASK(SIG_BLOCK, &set, &oset);
status = pthread_create(&th,
#if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
@@ -188,6 +191,7 @@
(void *)arg
);
+ SET_THREAD_SIGMASK(SIG_SETMASK, &oset, NULL);
#if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
pthread_attr_destroy(&attrs);
#endif

View File

@ -6,7 +6,7 @@
PORTNAME= python26
PORTVERSION= 2.6.1
PORTREVISION= 1
PORTREVISION= 2
CATEGORIES= lang python ipv6
MASTER_SITES= ${PYTHON_MASTER_SITES}
MASTER_SITE_SUBDIR= ${PYTHON_MASTER_SITE_SUBDIR}

View File

@ -0,0 +1,30 @@
$FreeBSD$
--- Python/thread_pthread.h
+++ Python/thread_pthread.h
@@ -149,6 +149,7 @@
{
pthread_t th;
int status;
+ sigset_t set, oset;
#if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
pthread_attr_t attrs;
#endif
@@ -177,6 +178,8 @@
#if defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
pthread_attr_setscope(&attrs, PTHREAD_SCOPE_SYSTEM);
#endif
+ sigfillset(&set);
+ SET_THREAD_SIGMASK(SIG_BLOCK, &set, &oset);
status = pthread_create(&th,
#if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
@@ -188,6 +191,7 @@
(void *)arg
);
+ SET_THREAD_SIGMASK(SIG_SETMASK, &oset, NULL);
#if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
pthread_attr_destroy(&attrs);
#endif