@@ -1706,6 +1706,7 @@ def close(self) -> None:
17061706 self .asyncgens .close ()
17071707 if "after_run" in self .instruments :
17081708 self .instruments .call ("after_run" )
1709+ self .system_nursery : Nursery | None = None
17091710 # This is where KI protection gets disabled, so we do it last
17101711 self .ki_manager .close ()
17111712
@@ -1920,6 +1921,7 @@ def task_exited(self, task: Task, outcome: Outcome[Any]) -> None:
19201921 task ._activate_cancel_status (None )
19211922 self .tasks .remove (task )
19221923 if task is self .init_task :
1924+ self .init_task = None
19231925 # If the init task crashed, then something is very wrong and we
19241926 # let the error propagate. (It'll eventually be wrapped in a
19251927 # TrioInternalError.)
@@ -1930,6 +1932,7 @@ def task_exited(self, task: Task, outcome: Outcome[Any]) -> None:
19301932 raise TrioInternalError
19311933 else :
19321934 if task is self .main_task :
1935+ self .main_task = None
19331936 self .main_task_outcome = outcome
19341937 outcome = Value (None )
19351938 assert task ._parent_nursery is not None , task
@@ -2394,12 +2397,15 @@ def run(
23942397 sniffio_library .name = prev_library
23952398 # Inlined copy of runner.main_task_outcome.unwrap() to avoid
23962399 # cluttering every single Trio traceback with an extra frame.
2397- if isinstance (runner .main_task_outcome , Value ):
2398- return cast (RetT , runner .main_task_outcome .value )
2399- elif isinstance (runner .main_task_outcome , Error ):
2400- raise runner .main_task_outcome .error
2401- else : # pragma: no cover
2402- raise AssertionError (runner .main_task_outcome )
2400+ try :
2401+ if isinstance (runner .main_task_outcome , Value ):
2402+ return cast (RetT , runner .main_task_outcome .value )
2403+ elif isinstance (runner .main_task_outcome , Error ):
2404+ raise runner .main_task_outcome .error
2405+ else : # pragma: no cover
2406+ raise AssertionError (runner .main_task_outcome )
2407+ finally :
2408+ del runner
24032409
24042410
24052411def start_guest_run (
@@ -2808,6 +2814,7 @@ def unrolled_run(
28082814 if isinstance (runner .main_task_outcome , Error ):
28092815 ki .__context__ = runner .main_task_outcome .error
28102816 runner .main_task_outcome = Error (ki )
2817+ del runner
28112818
28122819
28132820################################################################
0 commit comments