Skip to content

Commit e1b7a1a

Browse files
committed
Make Transport.resume_reading() and pause_reading() idempotent. Add is_reading().
Fixes issue #93. Implements python/cpython#528 asyncio change.
1 parent 62723b7 commit e1b7a1a

File tree

2 files changed

+17
-11
lines changed

2 files changed

+17
-11
lines changed

tests/test_tcp.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,10 +549,15 @@ async def test_client(addr):
549549
t.set_protocol(p)
550550

551551
self.assertFalse(t._paused)
552+
self.assertTrue(t.is_reading())
552553
t.pause_reading()
554+
t.pause_reading() # Check that it's OK to call it 2nd time.
553555
self.assertTrue(t._paused)
556+
self.assertFalse(t.is_reading())
554557
t.resume_reading()
558+
t.resume_reading() # Check that it's OK to call it 2nd time.
555559
self.assertFalse(t._paused)
560+
self.assertTrue(t.is_reading())
556561

557562
sock = t.get_extra_info('socket')
558563
self.assertIs(sock, t.get_extra_info('socket'))
@@ -580,6 +585,12 @@ async def test_client(addr):
580585
t.abort()
581586
self.assertTrue(t._closing)
582587

588+
self.assertFalse(t.is_reading())
589+
# Check that pause_reading and resume_reading don't raise
590+
# errors if called after the transport is closed.
591+
t.pause_reading()
592+
t.resume_reading()
593+
583594
await fut
584595

585596
# Test that peername and sockname are available after

uvloop/handles/stream.pyx

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -664,21 +664,16 @@ cdef class UVStream(UVBaseTransport):
664664
def can_write_eof(self):
665665
return True
666666

667-
def pause_reading(self):
668-
self._ensure_alive()
667+
def is_reading(self):
668+
return self._is_reading()
669669

670-
if self._closing:
671-
raise RuntimeError('Cannot pause_reading() when closing')
672-
if not self._is_reading():
673-
raise RuntimeError('Already paused')
670+
def pause_reading(self):
671+
if self._closing or not self._is_reading():
672+
return
674673
self._stop_reading()
675674

676675
def resume_reading(self):
677-
self._ensure_alive()
678-
679-
if self._is_reading():
680-
raise RuntimeError('Not paused')
681-
if self._closing:
676+
if self._is_reading() or self._closing:
682677
return
683678
self._start_reading()
684679

0 commit comments

Comments
 (0)