[Python-checkins] cpython (3.4): StreamWriter: close() now clears the reference to the transport

victor.stinner python-checkins at python.org
Thu Jan 15 09:36:31 CET 2015


https://hg.python.org/cpython/rev/6ab2575bc12b
changeset:   94160:6ab2575bc12b
branch:      3.4
parent:      94158:3e4d4c4968bb
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Thu Jan 15 09:33:50 2015 +0100
summary:
  StreamWriter: close() now clears the reference to the transport

StreamWriter now raises an exception if it is closed: write(), writelines(),
write_eof(), can_write_eof(), get_extra_info(), drain().

files:
  Lib/asyncio/streams.py |  25 +++++++++++++++++++++----
  1 files changed, 21 insertions(+), 4 deletions(-)


diff --git a/Lib/asyncio/streams.py b/Lib/asyncio/streams.py
--- a/Lib/asyncio/streams.py
+++ b/Lib/asyncio/streams.py
@@ -258,8 +258,22 @@
         self._reader = reader
         self._loop = loop
 
+    def close(self):
+        if self._transport is None:
+            return
+        self._transport.close()
+        self._transport = None
+
+    def _check_closed(self):
+        if self._transport is None:
+            raise RuntimeError('StreamWriter is closed')
+
     def __repr__(self):
-        info = [self.__class__.__name__, 'transport=%r' % self._transport]
+        info = [self.__class__.__name__]
+        if self._transport is not None:
+            info.append('transport=%r' % self._transport)
+        else:
+            info.append('closed')
         if self._reader is not None:
             info.append('reader=%r' % self._reader)
         return '<%s>' % ' '.join(info)
@@ -269,21 +283,23 @@
         return self._transport
 
     def write(self, data):
+        self._check_closed()
         self._transport.write(data)
 
     def writelines(self, data):
+        self._check_closed()
         self._transport.writelines(data)
 
     def write_eof(self):
+        self._check_closed()
         return self._transport.write_eof()
 
     def can_write_eof(self):
+        self._check_closed()
         return self._transport.can_write_eof()
 
-    def close(self):
-        return self._transport.close()
-
     def get_extra_info(self, name, default=None):
+        self._check_closed()
         return self._transport.get_extra_info(name, default)
 
     @coroutine
@@ -295,6 +311,7 @@
           w.write(data)
           yield from w.drain()
         """
+        self._check_closed()
         if self._reader is not None:
             exc = self._reader.exception()
             if exc is not None:

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list