Skip to content

Commit ef323e8

Browse files
authored
[3.6] bpo-31234: Fix dangling thread in test_ftp/poplib (#3554)
* bpo-31234: Fix dangling thread in test_ftp/poplib (#3540) Explicitly clear the server attribute in test_ftplib and test_poplib to prevent dangling thread. (cherry picked from commit d403a29) * bpo-31234: Fix dangling thread in test_ftplib (#3544) Clear also self.server_thread attribute in TestTimeouts.tearDown(). (cherry picked from commit b157ce1)
1 parent d99e85b commit ef323e8

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

Lib/test/test_ftplib.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,9 @@ def setUp(self):
470470
def tearDown(self):
471471
self.client.close()
472472
self.server.stop()
473+
# Explicitly clear the attribute to prevent dangling thread
474+
self.server = None
475+
asyncore.close_all(ignore_all=True)
473476

474477
def check_data(self, received, expected):
475478
self.assertEqual(len(received), len(expected))
@@ -799,6 +802,9 @@ def setUp(self):
799802
def tearDown(self):
800803
self.client.close()
801804
self.server.stop()
805+
# Explicitly clear the attribute to prevent dangling thread
806+
self.server = None
807+
asyncore.close_all(ignore_all=True)
802808

803809
def test_af(self):
804810
self.assertEqual(self.client.af, socket.AF_INET6)
@@ -857,6 +863,9 @@ def setUp(self):
857863
def tearDown(self):
858864
self.client.close()
859865
self.server.stop()
866+
# Explicitly clear the attribute to prevent dangling thread
867+
self.server = None
868+
asyncore.close_all(ignore_all=True)
860869

861870
def test_control_connection(self):
862871
self.assertNotIsInstance(self.client.sock, ssl.SSLSocket)
@@ -979,6 +988,8 @@ def setUp(self):
979988
def tearDown(self):
980989
ftplib.FTP.port = self.old_port
981990
self.server_thread.join()
991+
# Explicitly clear the attribute to prevent dangling thread
992+
self.server_thread = None
982993

983994
def server(self):
984995
# This method sets the evt 3 times:

Lib/test/test_poplib.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,8 @@ def setUp(self):
254254
def tearDown(self):
255255
self.client.close()
256256
self.server.stop()
257+
# Explicitly clear the attribute to prevent dangling thread
258+
self.server = None
257259

258260
def test_getwelcome(self):
259261
self.assertEqual(self.client.getwelcome(),
@@ -436,6 +438,8 @@ def tearDown(self):
436438
# this exception
437439
self.client.close()
438440
self.server.stop()
441+
# Explicitly clear the attribute to prevent dangling thread
442+
self.server = None
439443

440444
def test_stls(self):
441445
self.assertRaises(poplib.error_proto, self.client.stls)
@@ -461,7 +465,8 @@ def setUp(self):
461465

462466
def tearDown(self):
463467
self.thread.join()
464-
del self.thread # Clear out any dangling Thread objects.
468+
# Explicitly clear the attribute to prevent dangling thread
469+
self.thread = None
465470

466471
def server(self, evt, serv):
467472
serv.listen()

0 commit comments

Comments
 (0)