@@ -57,6 +57,7 @@ def __init__(self, loop, protocol, serial_instance):
57
57
self ._has_reader = False
58
58
self ._has_writer = False
59
59
self ._poll_wait_time = 0.0005
60
+ self ._max_out_waiting = 1024
60
61
61
62
# XXX how to support url handlers too
62
63
@@ -283,34 +284,36 @@ def _write_ready(self):
283
284
284
285
if os .name == "nt" :
285
286
def _poll_read (self ):
286
- if self ._has_reader :
287
+ if self ._has_reader and not self . _closing :
287
288
try :
289
+ self ._has_reader = self ._loop .call_later (self ._poll_wait_time , self ._poll_read )
288
290
if self .serial .in_waiting :
289
- self ._loop .call_soon (self ._read_ready )
290
- self ._loop .call_later (self ._poll_wait_time , self ._poll_read )
291
+ self ._read_ready ()
291
292
except serial .SerialException as exc :
292
293
self ._fatal_error (exc , 'Fatal write error on serial transport' )
293
294
294
295
def _ensure_reader (self ):
295
- if (not self ._has_reader ) and (not self ._closing ):
296
- self ._loop .call_later (self ._poll_wait_time , self ._poll_read )
297
- self ._has_reader = True
296
+ if not self ._has_reader and not self ._closing :
297
+ self ._has_reader = self ._loop .call_later (self ._poll_wait_time , self ._poll_read )
298
298
299
299
def _remove_reader (self ):
300
+ if self ._has_reader :
301
+ self ._has_reader .cancel ()
300
302
self ._has_reader = False
301
303
302
304
def _poll_write (self ):
303
- if self ._has_writer :
304
- if self .serial . out_waiting :
305
- self ._loop . call_soon ( self ._write_ready )
306
- self . _loop . call_later ( self . _poll_wait_time , self ._poll_write )
305
+ if self ._has_writer and not self . _closing :
306
+ self . _has_writer = self ._loop . call_later ( self . _poll_wait_time , self . _poll_write )
307
+ if self .serial . out_waiting < self ._max_out_waiting :
308
+ self ._write_ready ( )
307
309
308
310
def _ensure_writer (self ):
309
- if (not self ._has_writer ) and (not self ._closing ):
310
- self ._loop .call_later (self ._poll_wait_time , self ._poll_write )
311
- self ._has_writer = True
311
+ if not self ._has_writer and not self ._closing :
312
+ self ._has_writer = self ._loop .call_soon (self ._poll_write )
312
313
313
314
def _remove_writer (self ):
315
+ if self ._has_writer :
316
+ self ._has_writer .cancel ()
314
317
self ._has_writer = False
315
318
316
319
else :
0 commit comments