@@ -445,46 +445,47 @@ def g456():
445
445
t .start ()
446
446
entered_g .wait ()
447
447
448
- # At this point, t has finished its entered_g.set(), although it's
449
- # impossible to guess whether it's still on that line or has moved on
450
- # to its leave_g.wait().
451
- self .assertEqual (len (thread_info ), 1 )
452
- thread_id = thread_info [0 ]
453
-
454
- d = sys ._current_frames ()
455
- for tid in d :
456
- self .assertIsInstance (tid , int )
457
- self .assertGreater (tid , 0 )
458
-
459
- main_id = threading .get_ident ()
460
- self .assertIn (main_id , d )
461
- self .assertIn (thread_id , d )
462
-
463
- # Verify that the captured main-thread frame is _this_ frame.
464
- frame = d .pop (main_id )
465
- self .assertTrue (frame is sys ._getframe ())
466
-
467
- # Verify that the captured thread frame is blocked in g456, called
468
- # from f123. This is a little tricky, since various bits of
469
- # threading.py are also in the thread's call stack.
470
- frame = d .pop (thread_id )
471
- stack = traceback .extract_stack (frame )
472
- for i , (filename , lineno , funcname , sourceline ) in enumerate (stack ):
473
- if funcname == "f123" :
474
- break
475
- else :
476
- self .fail ("didn't find f123() on thread's call stack" )
477
-
478
- self .assertEqual (sourceline , "g456()" )
448
+ try :
449
+ # At this point, t has finished its entered_g.set(), although it's
450
+ # impossible to guess whether it's still on that line or has moved on
451
+ # to its leave_g.wait().
452
+ self .assertEqual (len (thread_info ), 1 )
453
+ thread_id = thread_info [0 ]
454
+
455
+ d = sys ._current_frames ()
456
+ for tid in d :
457
+ self .assertIsInstance (tid , int )
458
+ self .assertGreater (tid , 0 )
459
+
460
+ main_id = threading .get_ident ()
461
+ self .assertIn (main_id , d )
462
+ self .assertIn (thread_id , d )
463
+
464
+ # Verify that the captured main-thread frame is _this_ frame.
465
+ frame = d .pop (main_id )
466
+ self .assertTrue (frame is sys ._getframe ())
467
+
468
+ # Verify that the captured thread frame is blocked in g456, called
469
+ # from f123. This is a little tricky, since various bits of
470
+ # threading.py are also in the thread's call stack.
471
+ frame = d .pop (thread_id )
472
+ stack = traceback .extract_stack (frame )
473
+ for i , (filename , lineno , funcname , sourceline ) in enumerate (stack ):
474
+ if funcname == "f123" :
475
+ break
476
+ else :
477
+ self .fail ("didn't find f123() on thread's call stack" )
479
478
480
- # And the next record must be for g456().
481
- filename , lineno , funcname , sourceline = stack [i + 1 ]
482
- self .assertEqual (funcname , "g456" )
483
- self .assertIn (sourceline , ["leave_g.wait()" , "entered_g.set()" ])
479
+ self .assertEqual (sourceline , "g456()" )
484
480
485
- # Reap the spawned thread.
486
- leave_g .set ()
487
- t .join ()
481
+ # And the next record must be for g456().
482
+ filename , lineno , funcname , sourceline = stack [i + 1 ]
483
+ self .assertEqual (funcname , "g456" )
484
+ self .assertIn (sourceline , ["leave_g.wait()" , "entered_g.set()" ])
485
+ finally :
486
+ # Reap the spawned thread.
487
+ leave_g .set ()
488
+ t .join ()
488
489
489
490
@threading_helper .reap_threads
490
491
@threading_helper .requires_working_threading ()
@@ -516,43 +517,44 @@ def g456():
516
517
t .start ()
517
518
entered_g .wait ()
518
519
519
- # At this point, t has finished its entered_g.set(), although it's
520
- # impossible to guess whether it's still on that line or has moved on
521
- # to its leave_g.wait().
522
- self .assertEqual (len (thread_info ), 1 )
523
- thread_id = thread_info [0 ]
524
-
525
- d = sys ._current_exceptions ()
526
- for tid in d :
527
- self .assertIsInstance (tid , int )
528
- self .assertGreater (tid , 0 )
529
-
530
- main_id = threading .get_ident ()
531
- self .assertIn (main_id , d )
532
- self .assertIn (thread_id , d )
533
- self .assertEqual ((None , None , None ), d .pop (main_id ))
534
-
535
- # Verify that the captured thread frame is blocked in g456, called
536
- # from f123. This is a little tricky, since various bits of
537
- # threading.py are also in the thread's call stack.
538
- exc_type , exc_value , exc_tb = d .pop (thread_id )
539
- stack = traceback .extract_stack (exc_tb .tb_frame )
540
- for i , (filename , lineno , funcname , sourceline ) in enumerate (stack ):
541
- if funcname == "f123" :
542
- break
543
- else :
544
- self .fail ("didn't find f123() on thread's call stack" )
545
-
546
- self .assertEqual (sourceline , "g456()" )
520
+ try :
521
+ # At this point, t has finished its entered_g.set(), although it's
522
+ # impossible to guess whether it's still on that line or has moved on
523
+ # to its leave_g.wait().
524
+ self .assertEqual (len (thread_info ), 1 )
525
+ thread_id = thread_info [0 ]
526
+
527
+ d = sys ._current_exceptions ()
528
+ for tid in d :
529
+ self .assertIsInstance (tid , int )
530
+ self .assertGreater (tid , 0 )
531
+
532
+ main_id = threading .get_ident ()
533
+ self .assertIn (main_id , d )
534
+ self .assertIn (thread_id , d )
535
+ self .assertEqual ((None , None , None ), d .pop (main_id ))
536
+
537
+ # Verify that the captured thread frame is blocked in g456, called
538
+ # from f123. This is a little tricky, since various bits of
539
+ # threading.py are also in the thread's call stack.
540
+ exc_type , exc_value , exc_tb = d .pop (thread_id )
541
+ stack = traceback .extract_stack (exc_tb .tb_frame )
542
+ for i , (filename , lineno , funcname , sourceline ) in enumerate (stack ):
543
+ if funcname == "f123" :
544
+ break
545
+ else :
546
+ self .fail ("didn't find f123() on thread's call stack" )
547
547
548
- # And the next record must be for g456().
549
- filename , lineno , funcname , sourceline = stack [i + 1 ]
550
- self .assertEqual (funcname , "g456" )
551
- self .assertTrue (sourceline .startswith ("if leave_g.wait(" ))
548
+ self .assertEqual (sourceline , "g456()" )
552
549
553
- # Reap the spawned thread.
554
- leave_g .set ()
555
- t .join ()
550
+ # And the next record must be for g456().
551
+ filename , lineno , funcname , sourceline = stack [i + 1 ]
552
+ self .assertEqual (funcname , "g456" )
553
+ self .assertTrue (sourceline .startswith ("if leave_g.wait(" ))
554
+ finally :
555
+ # Reap the spawned thread.
556
+ leave_g .set ()
557
+ t .join ()
556
558
557
559
def test_attributes (self ):
558
560
self .assertIsInstance (sys .api_version , int )
0 commit comments