[Python-Dev] Signal-resistant code (was: Two random and nearly unrelated ideas)
Oren Tirosh
oren-py-d@hishome.net
Thu, 5 Sep 2002 08:27:37 +0300
On Wed, Sep 04, 2002 at 04:48:11PM -0400, Guido van Rossum wrote:
> [Jack]
> > Hmm, and when I think of it I don't think it's even possible to restart
> > safely. What if I do a read() on a socket, and I request more bytes
> > than the available physical memory (but less than VM, of course)? The
> > kernel simply doesn't have anywhere to store the bytes other than my
> > buffer, and if it has to return EINTR then >POOF< these bytes are gone
> > forever.
>
> I think that if any bytes have already been copied into your buffer,
> you don't get an EINTR, you get a short read.
>From read(2) man page:
EINTR The call was interrupted by a signal before any data was read.
Same applies to write, recv, fcntl with locks, semop, etc. They're all
designed to be restartable. The keyword in all cases is "before".
Oren