Skip to content
This repository was archived by the owner on Nov 23, 2017. It is now read-only.
This repository was archived by the owner on Nov 23, 2017. It is now read-only.

subprocess._loop deleted too soon causing exception when trying to read from pipe#484

@BotoX

Description

@BotoX

From https://bugs.python.org/issue23242#msg284930

The following script is used to reproduce the bug:

importasyncioasyncdefexecute(): process=awaitasyncio.create_subprocess_exec( "timeout", "0.1", "cat", "/dev/urandom", stdout=asyncio.subprocess.PIPE) whileTrue: data=awaitprocess.stdout.read(65536) print('read %d bytes'%len(data)) ifdata: awaitasyncio.sleep(0.3) else: breakasyncio.get_event_loop().run_until_complete(execute())

will produce following output and terminate with exception:

read 65536 bytes read 65536 bytes Traceback (most recent call last): File "read_subprocess.py", line 18, in <module> asyncio.get_event_loop().run_until_complete(execute()) File "/usr/lib/python3.6/asyncio/base_events.py", line 466, in run_until_complete return future.result() File "read_subprocess.py", line 9, in execute data = await process.stdout.read(65536) File "/usr/lib/python3.6/asyncio/streams.py", line 634, in read self._maybe_resume_transport() File "/usr/lib/python3.6/asyncio/streams.py", line 402, in _maybe_resume_transport self._transport.resume_reading() File "/usr/lib/python3.6/asyncio/unix_events.py", line 401, in resume_reading self._loop._add_reader(self._fileno, self._read_ready) AttributeError: 'NoneType' object has no attribute '_add_reader' 

When the process exits https://github.com/python/asyncio/blob/master/asyncio/unix_events.py#L444 is called which sets this._loop = None
Next time read() is called on the pipe the above exception is thrown.
I have tried to fix this issue myself but would sometimes have read terminate too early and miss the last chunks of data.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions