@@ -2047,6 +2047,7 @@ class TestFrameCaching(unittest.TestCase):
20472047 """
20482048
20492049 maxDiff = None
2050+ MAX_TRIES = 10
20502051
20512052 @contextlib .contextmanager
20522053 def _target_process (self , script_body ):
@@ -2112,10 +2113,15 @@ def _get_frames(self, unwinder, required_funcs):
21122113 return thread .frame_info
21132114 return None
21142115
2115- def _sample_frames (self , client_socket , unwinder , wait_signal , send_ack , required_funcs ):
2116+ def _sample_frames (self , client_socket , unwinder , wait_signal , send_ack , required_funcs , expected_frames = 1 ):
21162117 """Wait for signal, sample frames, send ack. Returns frame_info list."""
21172118 self ._wait_for_signal (client_socket , wait_signal )
2118- frames = self ._get_frames (unwinder , required_funcs )
2119+ # Give at least MAX_TRIES tries for the process to arrive to a steady state
2120+ for _ in range (self .MAX_TRIES ):
2121+ frames = self ._get_frames (unwinder , required_funcs )
2122+ if frames and len (frames ) >= expected_frames :
2123+ break
2124+ time .sleep (0.1 )
21192125 client_socket .sendall (send_ack )
21202126 return frames
21212127
@@ -2358,8 +2364,7 @@ def test_cache_vs_no_cache_equivalence(self):
23582364 """Test that cache_frames=True and cache_frames=False produce equivalent results."""
23592365 script_body = """\
23602366 def level3():
2361- sock.sendall(b"ready")
2362- sock.recv(16)
2367+ sock.sendall(b"ready"); sock.recv(16)
23632368
23642369 def level2():
23652370 level3()
@@ -2650,11 +2655,11 @@ def recurse(n):
26502655 unwinder_no_cache = make_unwinder (cache_frames = False )
26512656
26522657 frames_cached = self ._sample_frames (
2653- client_socket , unwinder_cache , b"ready" , b"ack" , {"recurse" }
2658+ client_socket , unwinder_cache , b"ready" , b"ack" , {"recurse" }, 1024
26542659 )
26552660 # Sample again with no cache for comparison
26562661 frames_no_cache = self ._sample_frames (
2657- client_socket , unwinder_no_cache , b"ready2" , b"done" , {"recurse" }
2662+ client_socket , unwinder_no_cache , b"ready2" , b"done" , {"recurse" }, 1024
26582663 )
26592664
26602665 self .assertIsNotNone (frames_cached )
0 commit comments