From b833fa88d339e9d8bbfe2f9a16567e50348202d2 Mon Sep 17 00:00:00 2001 From: Ezio Melotti Date: Thu, 12 Aug 2010 17:29:24 +0000 Subject: [PATCH] #9543: Fix regression introduced in r83624. --- Lib/socket.py | 2 +- Lib/test/test_socket.py | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/Lib/socket.py b/Lib/socket.py index 226eeebf67..e4f0a817c3 100644 --- a/Lib/socket.py +++ b/Lib/socket.py @@ -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) diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index f52d884748..3874a0f97e 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -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) -- 2.40.0