[pypy-issue] Issue #2166: Infinite loop in readinto (2.6.1) (pypy/pypy)

Ionel Cristian Mărieș issues-reply at bitbucket.org
Tue Oct 20 00:17:19 CEST 2015


New issue 2166: Infinite loop in readinto (2.6.1)
https://bitbucket.org/pypy/pypy/issues/2166/infinite-loop-in-readinto-261

Ionel Cristian Mărieș:

The case is not simple bug alas, I could not figure out a simple way to repro.

```python
import os
import signalfd, signal
fd = signalfd.signalfd(-1, [signal.SIGUSR1], signalfd.SFD_CLOEXEC | signalfd.SFD_NONBLOCK)
fh = os.fdopen(fd, 'rb')
signalfd.read_siginfo(fh)
```

You need to `pip install signalfd` - it uses cffi (source: https://github.com/ionelmc/python-signalfd/blob/master/src/signalfd/__init__.py#L90-L99)

Strace output looks like

```
signalfd4(-1, [USR1], 8, O_NONBLOCK|O_CLOEXEC) = 3
fstat(3, {st_mode=0600, st_size=0, ...}) = 0
fcntl(3, F_GETFL)                       = 0x802 (flags O_RDWR|O_NONBLOCK)
fstat(3, {st_mode=0600, st_size=0, ...}) = 0
read(3, 0x41763f0, 128)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763ef, 129)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763ee, 130)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763ed, 131)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763ec, 132)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763eb, 133)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763ea, 134)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763e9, 135)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763e8, 136)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763e7, 137)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763e6, 138)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763e5, 139)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763e4, 140)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763e3, 141)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763e2, 142)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763e1, 143)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763e0, 144)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763df, 145)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763de, 146)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763dd, 147)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763dc, 148)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763db, 149)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763da, 150)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763d9, 151)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763d8, 152)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763d7, 153)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763d6, 154)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763d5, 155)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763d4, 156)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763d3, 157)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763d2, 158)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763d1, 159)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763d0, 160)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763cf, 161)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763ce, 162)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763cd, 163)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763cc, 164)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763cb, 165)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763ca, 166)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763c9, 167)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763c8, 168)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763c7, 169)                 = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x41763c6, 170)                 = -1 EAGAIN (Resource temporarily unavailable)
```

The offset keeps incrementing. Does not happen on 2.6.0.




More information about the pypy-issue mailing list