Skip to content

Commit 1770fde

Browse files
Make some tests more frienly to MemoryError.
Free memory, unlock hanging threads.
2 parents cb0c602 + 9db5500 commit 1770fde

File tree

6 files changed

+42
-16
lines changed

6 files changed

+42
-16
lines changed

Lib/ctypes/test/test_find.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,25 @@ def setUpClass(cls):
3030

3131
cls.gl = cls.glu = cls.gle = None
3232
if lib_gl:
33-
cls.gl = CDLL(lib_gl, mode=RTLD_GLOBAL)
33+
try:
34+
cls.gl = CDLL(lib_gl, mode=RTLD_GLOBAL)
35+
except OSError:
36+
pass
3437
if lib_glu:
35-
cls.glu = CDLL(lib_glu, RTLD_GLOBAL)
38+
try:
39+
cls.glu = CDLL(lib_glu, RTLD_GLOBAL)
40+
except OSError:
41+
pass
3642
if lib_gle:
3743
try:
3844
cls.gle = CDLL(lib_gle)
3945
except OSError:
4046
pass
4147

48+
@classmethod
49+
def tearDownClass(cls):
50+
cls.gl = cls.glu = cls.gle = None
51+
4252
def test_gl(self):
4353
if self.gl is None:
4454
self.skipTest('lib_gl not available')

Lib/ctypes/test/test_pointers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
c_long, c_ulong, c_longlong, c_ulonglong, c_double, c_float]
88
python_types = [int, int, int, int, int, int,
99
int, int, int, int, float, float]
10-
LargeNamedType = type('T' * 2 ** 25, (Structure,), {})
11-
large_string = 'T' * 2 ** 25
1210

1311
class PointersTestCase(unittest.TestCase):
1412

@@ -194,9 +192,11 @@ def test_pointers_bool(self):
194192
self.assertEqual(bool(mth), True)
195193

196194
def test_pointer_type_name(self):
195+
LargeNamedType = type('T' * 2 ** 25, (Structure,), {})
197196
self.assertTrue(POINTER(LargeNamedType))
198197

199198
def test_pointer_type_str_name(self):
199+
large_string = 'T' * 2 ** 25
200200
self.assertTrue(POINTER(large_string))
201201

202202
if __name__ == '__main__':

Lib/test/lock_tests.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,12 @@ def task():
3939
self.finished.append(tid)
4040
while not self._can_exit:
4141
_wait()
42-
for i in range(n):
43-
start_new_thread(task, ())
42+
try:
43+
for i in range(n):
44+
start_new_thread(task, ())
45+
except:
46+
self._can_exit = True
47+
raise
4448

4549
def wait_for_started(self):
4650
while len(self.started) < self.n:

Lib/test/test_gc.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -402,10 +402,12 @@ def run_thread():
402402
for i in range(N_THREADS):
403403
t = threading.Thread(target=run_thread)
404404
threads.append(t)
405-
for t in threads:
406-
t.start()
407-
time.sleep(1.0)
408-
exit = True
405+
try:
406+
for t in threads:
407+
t.start()
408+
finally:
409+
time.sleep(1.0)
410+
exit = True
409411
for t in threads:
410412
t.join()
411413
finally:

Lib/test/test_io.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3603,11 +3603,16 @@ def check_interrupted_write_retry(self, item, **fdopen_kwargs):
36033603
# received (forcing a first EINTR in write()).
36043604
read_results = []
36053605
write_finished = False
3606+
error = None
36063607
def _read():
3607-
while not write_finished:
3608-
while r in select.select([r], [], [], 1.0)[0]:
3609-
s = os.read(r, 1024)
3610-
read_results.append(s)
3608+
try:
3609+
while not write_finished:
3610+
while r in select.select([r], [], [], 1.0)[0]:
3611+
s = os.read(r, 1024)
3612+
read_results.append(s)
3613+
except BaseException as exc:
3614+
nonlocal error
3615+
error = exc
36113616
t = threading.Thread(target=_read)
36123617
t.daemon = True
36133618
def alarm1(sig, frame):
@@ -3633,6 +3638,7 @@ def alarm2(sig, frame):
36333638
write_finished = True
36343639
t.join()
36353640

3641+
self.assertIsNone(error)
36363642
self.assertEqual(N, sum(len(x) for x in read_results))
36373643
finally:
36383644
write_finished = True

Lib/test/test_itertools.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1338,8 +1338,12 @@ def test_tee(self):
13381338
# Issue 13454: Crash when deleting backward iterator from tee()
13391339
def test_tee_del_backward(self):
13401340
forward, backward = tee(repeat(None, 20000000))
1341-
any(forward) # exhaust the iterator
1342-
del backward
1341+
try:
1342+
any(forward) # exhaust the iterator
1343+
del backward
1344+
except:
1345+
del forward, backward
1346+
raise
13431347

13441348
def test_StopIteration(self):
13451349
self.assertRaises(StopIteration, next, zip())

0 commit comments

Comments
 (0)