]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Don't keep any reference to memoryviews (#2173)
authorAntoine Pitrou <pitrou@free.fr>
Sun, 22 Oct 2017 14:02:14 +0000 (16:02 +0200)
committerBen Darnell <ben@bendarnell.com>
Sun, 22 Oct 2017 14:02:14 +0000 (10:02 -0400)
See https://github.com/tornadoweb/tornado/pull/2008 for reasons
why this might be necessary.

tornado/iostream.py

index 632952b524d32ea69b6d3d3764f05ee58d1ed40b..2026ae57e24a0cce699b174861a9bacd29ade6fc 100644 (file)
@@ -1066,7 +1066,12 @@ class IOStream(BaseIOStream):
         return chunk
 
     def write_to_fd(self, data):
-        return self.socket.send(data)
+        try:
+            return self.socket.send(data)
+        finally:
+            # Avoid keeping to data, which can be a memoryview.
+            # See https://github.com/tornadoweb/tornado/pull/2008
+            del data
 
     def connect(self, address, callback=None, server_hostname=None):
         """Connects the socket to a remote address without blocking.
@@ -1475,6 +1480,10 @@ class SSLIOStream(IOStream):
                 # simply return 0 bytes written.
                 return 0
             raise
+        finally:
+            # Avoid keeping to data, which can be a memoryview.
+            # See https://github.com/tornadoweb/tornado/pull/2008
+            del data
 
     def read_from_fd(self):
         if self._ssl_accepting:
@@ -1532,7 +1541,12 @@ class PipeIOStream(BaseIOStream):
         os.close(self.fd)
 
     def write_to_fd(self, data):
-        return os.write(self.fd, data)
+        try:
+            return os.write(self.fd, data)
+        finally:
+            # Avoid keeping to data, which can be a memoryview.
+            # See https://github.com/tornadoweb/tornado/pull/2008
+            del data
 
     def read_from_fd(self):
         try: