Ronald Oussoren <ronaldousso...@mac.com> added the comment:

On 16 Sep, 2010, at 14:36, Armin Ronacher wrote:

> 
> Armin Ronacher <armin.ronac...@active-4.com> added the comment:
> 
>> Wouldn't retrying on EINTR cause havoc when you try to interrupt a process?
> 
> All your C applications are doing it, why should Python cause havok there?  
> Check the POSIX specification on that if you don't trust me.
> 
>> That is: what would happen with the proposed patch when a python script
>> does a read that takes a very long time and the user tries to interrupt 
>> the script (by using Ctrl+C to send a SIGTERM)?
> EINTR is only returned if nothing was read so far and the call was 
> interrupted in case of fread.
> 
> Here a quick explanation from the GNU's libc manual:
> http://www.gnu.org/s/libc/manual/html_node/Interrupted-Primitives.html

You conveniently didn't quote the part of my message where I explained why I 
think there may be a problem.

CPython's signal handlers just set a global flag to indicate that a signal 
occurred and run the actual signal handler later on from the main interpreter 
loop, see signal_handler in Modules/signal.c and intcatcher in 
Parser/intrcheck.c.  

The latter contains the default handler for SIGINT and that already contains 
code that deals with SIGINT not having any effect (when you sent SIGINT twice 
in a row without CPython running pending calls the interpreter gets aborted). 

Because Python's signal handlers only set a flag and do the actual action later 
on blindly rerunning system calls when errno == EINTR may result in programs 
that don't seem to react to signals at all.

----------

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

Reply via email to