New submission from skorpeo <[email protected]>:
I humbly submit what I think may be a bug in the asyncio.StreamReader.read()
function. When n=-1 is supplied and the data is less than self._limit the read
function creates a future and never wakes it up. I believe the culprit is
https://github.com/python/cpython/blob/9d3627e311211a1b4abcda29c36fe4afe2c46532/Lib/asyncio/streams.py#L632.
To fix the issue a condition is added to break out of the loop if the data
read is less than the limit. I can only attach one file so I am providing the
fix here for asyncio streams.py:
blocks.append(block) # existing
if len(block) < self._limit: # new
break # new
I have also attached a test file that shows the blocking behavior which is
alleviated with the above fix. Finally, I am not sure how to handle a
situation where the data is exactly equal to the limit and no subsequent data
is sent.
----------
components: asyncio
files: pty_test.py
messages: 317810
nosy: asvetlov, skorpeo, yselivanov
priority: normal
severity: normal
status: open
title: asyncio Stream Reader Blocks on read when data fetched is less than limit
type: behavior
versions: Python 3.6
Added file: https://bugs.python.org/file47615/pty_test.py
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue33662>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com