Note: I'm just merging in the additional test.

Merged revisions 80428 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r80428 | antoine.pitrou | 2010-04-24 01:25:45 +0200 (sam., 24 avril 2010) | 4 lines

  Issue #5238: Calling makefile() on an SSL object would prevent the
  underlying socket from being closed until all objects get truely destroyed.
........
This commit is contained in:
Antoine Pitrou 2010-04-23 23:31:47 +00:00
parent 9d5436621f
commit cfcd8adf71

View file

@ -6,7 +6,9 @@ from test import support
import socket import socket
import select import select
import time import time
import gc
import os import os
import errno
import pprint import pprint
import urllib.parse, urllib.request import urllib.parse, urllib.request
import traceback import traceback
@ -149,6 +151,22 @@ class BasicTests(unittest.TestCase):
del ss del ss
self.assertEqual(wr(), None) self.assertEqual(wr(), None)
def test_makefile_close(self):
# Issue #5238: creating a file-like object with makefile() shouldn't
# leak the underlying file descriptor.
ss = ssl.wrap_socket(socket.socket(socket.AF_INET))
fd = ss.fileno()
f = ss.makefile()
f.close()
# The fd is still open
os.read(fd, 0)
# Closing the SSL socket should close the fd too
ss.close()
gc.collect()
with self.assertRaises(OSError) as e:
os.read(fd, 0)
self.assertEqual(e.exception.errno, errno.EBADF)
class NetworkedTests(unittest.TestCase): class NetworkedTests(unittest.TestCase):