+
    Bi                        ^ RI t ^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt  ! R R]P                  4      t
 ! R R]P                  4      t]P                   ! R	 R
]P                  4      4       t]R8X  d   ]P                  ! 4        R# R# )    N)support)script_helper)threading_helperc                   &   a  ] tR t^	t o R tRtV tR# )GeneralTestc                ^    \         P                  ! R 4      p\        P                  ! V4       R# )z_test_atexit.pyN)r   findfiler   run_test_script)selfscripts   & '/usr/lib/python3.14/test/test_atexit.pytest_generalGeneralTest.test_general
   s!    !!"34%%f-     N)__name__
__module____qualname____firstlineno__r   __static_attributes____classdictcell____classdict__s   @r   r   r   	   s     . .r   r   c                      a  ] tR t^t o R tR t]P                  ! 4       ]P                  ! R4      ]
P                  ! ]P                  R4      R 4       4       4       tRtV tR# )FunctionalTestc                
   \         P                  ! R 4      p\        P                  ! RV4      pV P	                  VP
                  P                  4       P                  4       RR.4       V P                  VP                  4       R# )z
            import atexit

            def f(msg):
                print(msg)

            atexit.register(f, "one")
            atexit.register(f, "two")
        -ctwooneN
textwrapdedentr   assert_python_okassertEqualoutdecode
splitlinesassertFalseerrr   coderess   &  r   test_shutdownFunctionalTest.test_shutdown   sc        ,,T48)446G!r   c                
   \         P                  ! R 4      p\        P                  ! RV4      pV P	                  VP
                  P                  4       P                  4       RR.4       V P                  VP                  4       R# )a@  
            import sys
            import atexit as atexit1
            del sys.modules['atexit']
            import atexit as atexit2
            del sys.modules['atexit']

            assert atexit2 is not atexit1

            atexit1.register(print, "atexit1")
            atexit2.register(print, "atexit2")
        r   atexit2atexit1Nr    r*   s   &  r   test_atexit_instances$FunctionalTest.test_atexit_instances   sd        ,,T48)446I8NO!r   cpuzonly meaningful without the GILc                `    R p\         P                  ! R\        P                  ! V4      4       R# )a  
        from threading import Thread

        def dummy():
            pass


        def thready():
            for _ in range(100):
                atexit.register(dummy)
                atexit._clear()
                atexit.register(dummy)
                atexit.unregister(dummy)
                atexit._run_exitfuncs()


        threads = [Thread(target=thready) for _ in range(10)]
        for thread in threads:
            thread.start()

        for thread in threads:
            thread.join()
        r   N)r   r#   r!   r"   )r   sources   & r   test_atexit_thread_safety(FunctionalTest.test_atexit_thread_safety1   s$    
4 	&&tX__V-DEr   r   N)r   r   r   r   r-   r2   r   requires_working_threadingr   requires_resourceunittest
skipUnlessPy_GIL_DISABLEDr7   r   r   r   s   @r   r   r      s^     ""$ 002u%002STF U & 3Fr   r   c                   l   a  ] tR t^St o R tR t]P                  ! ]! ]	R4      R4      R 4       t
RtV tR# )SubinterpreterTestc                    \         P                  ! 4       p\        P                  ! R 4      p\        P
                  ! V4      pV P                  V^ 4       V P                  \         P                  ! 4       V4       R# )z
            import atexit
            def f():
                pass
            atexit.register(f)
            del atexit
        Natexit_ncallbacksr!   r"   r   run_in_subinterpr$   r   nr+   rets   &   r   test_callbacks_leak&SubinterpreterTest.test_callbacks_leakV   s`          &&t,a ++-q1r   c                    \         P                  ! 4       p\        P                  ! R 4      p\        P
                  ! V4      pV P                  V^ 4       V P                  \         P                  ! 4       V4       R# )z
            import atexit
            def f():
                pass
            atexit.register(f)
            atexit.__atexit = atexit
        NrA   rE   s   &   r   test_callbacks_leak_refcycle/SubinterpreterTest.test_callbacks_leak_refcyclef   s`          &&t,a ++-q1r   pipezrequires os.pipe()c                f   R p\         P                  ! 4       w  r#\        P                  ! RP	                  V4      4      p\
        P                  ! V4      p\         P                  ! V4       V P                  \         P                  ! V\        V4      4      V4       \         P                  ! V4       R# )s   The test has passed!z
            import os
            import atexit
            def callback():
                os.write({:d}, b"The test has passed!")
            atexit.register(callback)
        N)osrM   r!   r"   formatr   rD   closer$   readlen)r   expectedrwr+   rG   s   &     r   (test_callback_on_subinterpreter_teardown;SubinterpreterTest.test_callback_on_subinterpreter_teardownu   s{     +wwy   F1I &&t,
CM2H=
r   r   N)r   r   r   r   rH   rK   r;   r<   hasattrrO   rW   r   r   r   s   @r   r?   r?   S   s9     2 2 V,.BC Dr   r?   __main__)rB   rO   r!   r;   testr   test.supportr   r   TestCaser   r   cpython_onlyr?   r   mainr   r   r   <module>r`      s     	    & ).(## .AFX&& AFH 	2** 2 2j zMMO r   