#9543: Fix regression introduced in r83624.
authorEzio Melotti <ezio.melotti@gmail.com>
Thu, 12 Aug 2010 17:29:24 +0000 (17:29 +0000)
committerEzio Melotti <ezio.melotti@gmail.com>
Thu, 12 Aug 2010 17:29:24 +0000 (17:29 +0000)
Lib/socket.py
Lib/test/test_socket.py

index 226eeebf67b962aff3ce95a82d37568fb5779b08..e4f0a817c385e71e24638edd3c242b1c8bf2c37e 100644 (file)
@@ -299,7 +299,7 @@ class _fileobject(object):
             finally:
                 if write_offset < data_size:
                     remainder = data[write_offset:]
-                    del view, data  # explicit free
+                    del data  # explicit free
                     self._wbuf.append(remainder)
                     self._wbuf_len = len(remainder)
 
index f52d8847484f7d29605cd1de2cf7f7692e1b7ae0..3874a0f97e62c07ace0cd8d884a9818d3fe4f3f9 100644 (file)
@@ -1044,6 +1044,30 @@ class NetworkConnectionBehaviourTest(SocketTCPTest, ThreadableTest):
         self.cli = sock = socket.create_connection((HOST, self.port), timeout=1)
         self.failUnlessRaises(socket.timeout, lambda: sock.recv(5))
 
+class TestIssue9543(SocketTCPTest, NetworkConnectionTest):
+    """
+    This test exercises the code in the _fileobject.flush() method when the
+    whole write buffer hasn't been flushed.
+    See http://bugs.python.org/issue9543
+    """
+    # XXX: this is just a sanity check, proper tests for flush() should still
+    #      be added
+    def setUp(self):
+        SocketTCPTest.setUp(self)
+        NetworkConnectionTest.clientSetUp(self)
+
+    def test_issue9543(self):
+        self.cli.close()
+        file_a = self.serv.makefile('w')
+        file_a.write('x')
+        # flush() will try to send data to self.cli and raise an error because
+        # it's closed
+        self.assertRaises(socket.error, file_a.flush)
+        # close() will raise an error too, because it calls flush() before
+        # closing the file
+        self.assertRaises(socket.error, file_a.close)
+        self.assertTrue(file_a.closed)
+
 
 class Urllib2FileobjectTest(unittest.TestCase):
 
@@ -1311,6 +1335,7 @@ def test_main():
         NetworkConnectionNoServer,
         NetworkConnectionAttributesTest,
         NetworkConnectionBehaviourTest,
+        TestIssue9543,
     ])
     if hasattr(socket, "socketpair"):
         tests.append(BasicSocketPairTest)