STINNER Victor <victor.stin...@haypocalc.com> added the comment:

The problem is that faulthandler's thread (faulthandler_thread) receives the 
SIGALRM signal: the signal interrupts sem_timedwait() which returns EINTR. 
PyThread_acquire_lock_timed() retries sem_timedwait() and so the other thread 
executing sendall() is not interrupted.

The solution is to configure which signals are handled by faulthandler_thread() 
using pthread_sigmask():
http://hg.python.org/sandbox/haypo/rev/4257fdfa5661

I forced a build on x86 FreeBSD (custom) buildbot:
http://www.python.org/dev/buildbot/all/builders/x86%20FreeBSD%20custom

I already tested sigprocmask() on FreeBSD (in my VM) and it works as expected: 
test_socket doesn't block anymore.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue11753>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to