@@ -532,7 +532,7 @@ def create_at_exit():
532532 # -----------------------------------------------------------------
533533
534534 def test_getcurrent_returns_none_during_gc_finalization (self ):
535- # greenlet.getcurrent() must return None when called from a
535+ # greenlet.getcurrent() must raise an exception when called from a
536536 # __del__ method during Py_FinalizeEx's GC collection pass.
537537
538538 # On Python >= 3.11, _Py_IsFinalizing() is True during this
@@ -549,8 +549,9 @@ def test_getcurrent_returns_none_during_gc_finalization(self):
549549 class CleanupChecker:
550550 def __del__(self):
551551 try:
552- cur = greenlet.getcurrent()
553- if cur is None:
552+ try:
553+ greenlet.getcurrent()
554+ except RuntimeError:
554555 os.write(1, b"GUARDED: getcurrent=None\\ n")
555556 else:
556557 os.write(1, b"UNGUARDED: getcurrent="
@@ -568,9 +569,7 @@ def __del__(self):
568569 """ )
569570 self .assertEqual (rc , 0 , f"Process crashed (rc={ rc } ):\n { stdout } { stderr } " )
570571 self .assertIn ("OK: deferred cycle created" , stdout )
571- self .assertIn ("GUARDED: getcurrent=None" , stdout ,
572- "getcurrent() must return None during GC finalization; "
573- "returned a live object instead (missing Py_IsFinalizing guard)" )
572+ self .assertIn ("GUARDED: getcurrent=None" , stdout )
574573
575574 def test_getcurrent_returns_none_during_gc_finalization_with_active_greenlets (self ):
576575 # Same as above but with active greenlets at shutdown, which
@@ -586,8 +585,9 @@ def test_getcurrent_returns_none_during_gc_finalization_with_active_greenlets(se
586585 class CleanupChecker:
587586 def __del__(self):
588587 try:
589- cur = greenlet.getcurrent()
590- if cur is None:
588+ try:
589+ greenlet.getcurrent()
590+ except RuntimeError:
591591 os.write(1, b"GUARDED: getcurrent=None\\ n")
592592 else:
593593 os.write(1, b"UNGUARDED: getcurrent="
@@ -614,9 +614,7 @@ def worker():
614614 """ )
615615 self .assertEqual (rc , 0 , f"Process crashed (rc={ rc } ):\n { stdout } { stderr } " )
616616 self .assertIn ("OK: 10 active greenlets, cycle deferred" , stdout )
617- self .assertIn ("GUARDED: getcurrent=None" , stdout ,
618- "getcurrent() must return None during GC finalization; "
619- "returned a live object instead (missing Py_IsFinalizing guard)" )
617+ self .assertIn ("GUARDED: getcurrent=None" , stdout )
620618
621619 def test_getcurrent_returns_none_during_gc_finalization_cross_thread (self ):
622620 # Combines cross-thread greenlet deallocation (deleteme list)
@@ -636,8 +634,9 @@ def test_getcurrent_returns_none_during_gc_finalization_cross_thread(self):
636634 class CleanupChecker:
637635 def __del__(self):
638636 try:
639- cur = greenlet.getcurrent()
640- if cur is None:
637+ try:
638+ greenlet.getcurrent()
639+ except RuntimeError:
641640 os.write(1, b"GUARDED: getcurrent=None\\ n")
642641 else:
643642 os.write(1, b"UNGUARDED: getcurrent="
@@ -669,9 +668,7 @@ def body():
669668 """ )
670669 self .assertEqual (rc , 0 , f"Process crashed (rc={ rc } ):\n { stdout } { stderr } " )
671670 self .assertIn ("OK: cross-thread cleanup + cycle deferred" , stdout )
672- self .assertIn ("GUARDED: getcurrent=None" , stdout ,
673- "getcurrent() must return None during GC finalization; "
674- "returned a live object instead (missing Py_IsFinalizing guard)" )
671+ self .assertIn ("GUARDED: getcurrent=None" , stdout )
675672
676673
677674 # -----------------------------------------------------------------
0 commit comments