@@ -470,6 +470,9 @@ def setUp(self): |
|
|
470 |
470 |
def tearDown(self): |
471 |
471 |
self.client.close() |
472 |
472 |
self.server.stop() |
|
473 |
+# Explicitly clear the attribute to prevent dangling thread |
|
474 |
+self.server = None |
|
475 |
+asyncore.close_all(ignore_all=True) |
473 |
476 |
|
474 |
477 |
def check_data(self, received, expected): |
475 |
478 |
self.assertEqual(len(received), len(expected)) |
@@ -799,6 +802,9 @@ def setUp(self): |
|
|
799 |
802 |
def tearDown(self): |
800 |
803 |
self.client.close() |
801 |
804 |
self.server.stop() |
|
805 |
+# Explicitly clear the attribute to prevent dangling thread |
|
806 |
+self.server = None |
|
807 |
+asyncore.close_all(ignore_all=True) |
802 |
808 |
|
803 |
809 |
def test_af(self): |
804 |
810 |
self.assertEqual(self.client.af, socket.AF_INET6) |
@@ -857,6 +863,9 @@ def setUp(self): |
|
|
857 |
863 |
def tearDown(self): |
858 |
864 |
self.client.close() |
859 |
865 |
self.server.stop() |
|
866 |
+# Explicitly clear the attribute to prevent dangling thread |
|
867 |
+self.server = None |
|
868 |
+asyncore.close_all(ignore_all=True) |
860 |
869 |
|
861 |
870 |
def test_control_connection(self): |
862 |
871 |
self.assertNotIsInstance(self.client.sock, ssl.SSLSocket) |
@@ -979,6 +988,8 @@ def setUp(self): |
|
|
979 |
988 |
def tearDown(self): |
980 |
989 |
ftplib.FTP.port = self.old_port |
981 |
990 |
self.server_thread.join() |
|
991 |
+# Explicitly clear the attribute to prevent dangling thread |
|
992 |
+self.server_thread = None |
982 |
993 |
|
983 |
994 |
def server(self): |
984 |
995 |
# This method sets the evt 3 times: |