§
    dŠtjP  ã                   ó(  — d Z ddlZddlZddlZddlZddlZddlZddlmZ ddlm	Z	 ddlm
Z
 ddlmZ ddlmZ dd	lmZ dd
lmZ ej        sJ ‚ G d„ de¦  «        Zd„ Z G d„ de¦  «        Zedk    r ed¦  «                             ¦   «          dS dS )z)
Testing scenarios that may have leaked.
é    Né   )ÚTestCase)ÚPY314)ÚRUNNING_ON_FREETHREAD_BUILD)ÚWIN)Úfails_leakcheck)Úignores_leakcheck)ÚRUNNING_ON_MANYLINUXc                   óJ   — e Zd Z e¦   «         Zd„ Zd„ Zd„ Zed„ ¦   «         Z	dS )ÚHasFinalizerTracksInstancesc                 ó†   — t          j        |¦  «        | _        | j                             t          | ¦  «        ¦  «         d S ©N)ÚsysÚinternÚmsgÚEXTANT_INSTANCESÚaddÚid)Úselfr   s     úW/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/greenlet/tests/test_leaks.pyÚ__init__z$HasFinalizerTracksInstances.__init__   s4   € Ý”:˜c‘?”?ˆŒØÔ×!Ò!¥" T¡(¤(Ñ+Ô+Ð+Ð+Ð+ó    c                 óT   — | j                              t          | ¦  «        ¦  «         d S r   )r   Úremover   ©r   s    r   Ú__del__z#HasFinalizerTracksInstances.__del__    s%   € ØÔ×$Ò$¥R¨¡X¤XÑ.Ô.Ð.Ð.Ð.r   c                 ó4   — dt          | ¦  «        | j        fz  S )Nz(<HasFinalizerTracksInstances at 0x%x %r>)r   r   r   s    r   Ú__repr__z$HasFinalizerTracksInstances.__repr__"   s!   € Ø9Ýˆt‰HŒH�d”hð=
ñ 
ð 	
r   c                 ó8   — | j                              ¦   «          d S r   )r   Úclear)Úclss    r   Úresetz!HasFinalizerTracksInstances.reset&   s   € àÔ×"Ò"Ñ$Ô$Ð$Ð$Ð$r   N)
Ú__name__Ú
__module__Ú__qualname__Úsetr   r   r   r   Úclassmethodr"   © r   r   r   r      sh   € € € € € Ø�s‘u”uÐð,ð ,ð ,ð/ð /ð /ð
ð 
ð 
ð ð%ð %ñ „[ð%ð %ð %r   r   c                 ó2   — t           r| S t          | ¦  «        S r   )r   r   )Úfuncs    r   Ú&fails_leakcheck_except_on_free_thradedr+   +   s   € Ý"ð ð ˆÝ˜4Ñ Ô Ð r   c                   óð   — e Zd Zd„ Zd„ Zed„ ¦   «         Zd„ Zd„ Zd„ Z		 	 dd	„Z
d
„ Zd„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         ZdZd„ Zed„ ¦   «         Zdd„Zed„ ¦   «         Zed„ ¦   «         ZdS )Ú	TestLeaksc                 óä   — d}t          j        |¦  «        }t          j        d„ ¦  «        }t          d¦  «        D ]} |j        |Ž  Œ|                      t          j        |¦  «        |¦  «         d S )N)ÚaÚbÚcc                  óB   —  t          j        ¦   «         j        j        | Ž S r   ©ÚgreenletÚ
getcurrentÚparentÚswitch)Úargss    r   ú<lambda>z)TestLeaks.test_arg_refs.<locals>.<lambda>:   s   € Ð=�(Ô-Ñ/Ô/Ô6Ô=¸tÐD€ r   éd   )r   Úgetrefcountr4   Úranger7   ÚassertEqual)r   r8   Úrefcount_beforeÚgÚ_s        r   Útest_arg_refszTestLeaks.test_arg_refs5   sz   € ØˆÝœ/¨$Ñ/Ô/ˆåÔØDÐDñFô Fˆå�s‘”ð 	ð 	ˆAØˆAŒH�dˆOˆOˆOØ×Ò�œ¨Ñ.Ô.°Ñ@Ô@Ð@Ð@Ð@r   c                 ó6  — i }|                       t          j        |¦  «        t          sdnd¦  «         t	          j        d„ ¦  «        }t          d¦  «        D ]} |j        di |¤Ž Œ|                       t          j        |¦  «        t          sdnd¦  «         d S )Né   r   c                  óH   —  t          j        ¦   «         j        j        di | ¤ŽS )Nr(   r3   )Úgkwargss    r   r9   z+TestLeaks.test_kwarg_refs.<locals>.<lambda>D   s&   € ÐA�hÔ1Ñ3Ô3Ô:ÔAÐLÐLÀGÐLÐL€ r   r:   r(   )r=   r   r;   r   r4   r<   r7   )r   Úkwargsr?   r@   s       r   Útest_kwarg_refszTestLeaks.test_kwarg_refs?   s«   € ØˆØ×Ò�œ¨Ñ0Ô0½5Ð2G°!°!ÀaÑHÔHÐHåÔØLÐLñNô Nˆå�s‘”ð 	ð 	ˆAØˆAŒHÐÐ�vÐÐÐÐð 	×Ò�œ¨Ñ0Ô0½5Ð2G°!°!ÀaÑHÔHÐHÐHÐHr   c                  ó°   — d„ } t          j        | ¬¦  «        }|                     ¦   «          t          j        d¦  «         |                     d¦  «         d S )Nc                  ó.   — t          j        d¦  «         d S )Nçü©ñÒMbP?)ÚtimeÚsleepr(   r   r   Úworkerz+TestLeaks.__recycle_threads.<locals>.workerT   s   € ÝŒJ�uÑÔÐÐÐr   ©ÚtargetrJ   é
   )Ú	threadingÚThreadÚstartrK   rL   Újoin)rM   Úts     r   Ú__recycle_threadszTestLeaks.__recycle_threadsL   sT   € ð	ð 	ð 	åÔ FÐ+Ñ+Ô+ˆØ	�Š‰	Œ	ˆ	ÝŒ
�5ÑÔÐØ	�Šˆr‰
Œ
ˆ
ˆ
ˆ
r   c                 ó¼  ‡— g Šˆfd„}t          d¦  «        D ]A}t          j        |¬¦  «        }|                     ¦   «          |                     d¦  «         ~ŒBt          j        ¦   «          |                      ¦   «          t          j        ¦   «          t          j	        ¦   «          t          j        ¦   «          ‰D ]}|  
                     |¦   «         ¦  «         Œ d S )Nc                  óx   •— ‰                       t          j        t          j        ¦   «         ¦  «        ¦  «         d S r   )ÚappendÚweakrefÚrefr4   r5   )Úggs   €r   rM   z,TestLeaks.test_threaded_leak.<locals>.worker]   s.   ø€ à�IŠI•g”k¥(Ô"5Ñ"7Ô"7Ñ8Ô8Ñ9Ô9Ð9Ð9Ð9r   rC   rN   rP   ©r<   rQ   rR   rS   rT   r4   r5   Ú_TestLeaks__recycle_threadsÚgcÚcollectÚassertIsNone©r   rM   r@   rU   r?   r\   s        @r   Útest_threaded_leakzTestLeaks.test_threaded_leak[   sì   ø€ Øˆð	:ð 	:ð 	:ð 	:ð 	:õ �q‘”ð 	ð 	ˆAÝÔ ¨Ð/Ñ/Ô/ˆAØ�GŠG‰IŒIˆIØ�FŠF�2‰JŒJˆJØ�ÝÔÑÔÐØ×ÒÑ Ô Ð ÝÔÑÔÐÝ
Œ
‰ŒˆÝÔÑÔÐØð 	#ð 	#ˆAØ×Ò˜a˜a™cœcÑ"Ô"Ð"Ð"ð	#ð 	#r   c                 ó¼  ‡— g Šˆfd„}t          d¦  «        D ]A}t          j        |¬¦  «        }|                     ¦   «          |                     d¦  «         ~ŒBt          j        ¦   «          |                      ¦   «          t          j        ¦   «          t          j	        ¦   «          t          j        ¦   «          ‰D ]}|  
                     |¦   «         ¦  «         Œ d S )Nc                  ó(  •‡— g xŠt          j        ¦   «         _        ˆfd„} t          d¦  «        D ](}t          j         | ¦  «                             ¦   «          Œ)‰                     t          j        t          j        ¦   «         ¦  «        ¦  «         d S )Nc                  óT   •— ‰                       t          j        ¦   «         ¦  «         d S r   )rY   r4   r5   )Úlls   €r   Ú
additionalzDTestLeaks.test_threaded_adv_leak.<locals>.worker.<locals>.additionalr   s$   ø€ Ø—	’	�(Ô-Ñ/Ô/Ñ0Ô0Ð0Ð0Ð0r   rC   )r4   r5   rg   r<   r7   rY   rZ   r[   )rh   r@   rg   r\   s     @€r   rM   z0TestLeaks.test_threaded_adv_leak.<locals>.workero   s“   øø€ à,.Ð.ˆB•Ô$Ñ&Ô&Ô)ð1ð 1ð 1ð 1ð 1å˜1‘X”Xð 7ð 7�ÝÔ! *Ñ-Ô-×4Ò4Ñ6Ô6Ð6Ð6Ø�IŠI•g”k¥(Ô"5Ñ"7Ô"7Ñ8Ô8Ñ9Ô9Ð9Ð9Ð9r   rC   rN   rP   r]   rb   s        @r   Útest_threaded_adv_leakz TestLeaks.test_threaded_adv_leakm   sì   ø€ Øˆð	:ð 	:ð 	:ð 	:ð 	:õ �q‘”ð 	ð 	ˆAÝÔ ¨Ð/Ñ/Ô/ˆAØ�GŠG‰IŒIˆIØ�FŠF�2‰JŒJˆJØ�ÝÔÑÔÐØ×ÒÑ Ô Ð ÝÔÑÔÐÝ
Œ
‰ŒˆÝÔÑÔÐØð 	#ð 	#ˆAØ×Ò˜a˜a™cœcÑ"Ô"Ð"Ð"ð	#ð 	#r   c                 ó^  — t           j                             ¦   «         }|                      |d¦  «         t           j                             d¦  «         t           j                             ¦   «         }|                      ||¦  «         |                      t           j        j        d¦  «         d S )Nr   Tr   )r4   Ú	_greenletÚ&get_clocks_used_doing_optional_cleanupÚassertGreaterEqualÚenable_optional_cleanupr=   ÚassertGreaterÚCLOCKS_PER_SEC)r   ÚusedÚused2s      r   ÚassertClocksUsedzTestLeaks.assertClocksUsed„   s�   € ÝÔ!×HÒHÑJÔJˆØ×Ò  aÑ(Ô(Ð(åÔ×2Ò2°4Ñ8Ô8Ð8ÝÔ"×IÒIÑKÔKˆØ×Ò˜˜uÑ%Ô%Ð%Ø×Ò�8Ô-Ô<¸aÑ@Ô@Ð@Ð@Ð@r   TFc                 óð  ‡‡‡	‡
‡‡‡— t          j        g ¦  «        sJ ‚t                               ¦   «          t	          j        ¦   «          |                      t          j        d¬¦  «        }t          j        ¦   «         Š
t          j        ¦   «         Š	g Šˆfd„Šg Šˆ	ˆ
ˆˆˆˆfd„}t          j	        |¬¦  «        }| 
                    ¦   «          ‰
                     d¦  «         t	          j        ¦   «          |                      t          d¬¦  «        }t          ‰¦  «        dk    sJ ‚|                      ‰d	         j        ¦  «         ‰d d …= ‰	                     ¦   «          |                     d¦  «         ~|                      ¦   «          |                      t          d¬¦  «        }|                      t          j        d¬¦  «        }|                      ||¦  «         ‰sct          j                             ¦   «         �E|                      ||¦  «         ‰r,|                      t          j        t!          ¦   «         ¦  «         n	 t          j                             ¦   «         �|                      ¦   «          d S d S )
NF)Ú
exact_kindc                  ó2  •— t          d¦  «        } t          j                             dt          d¦  «        ¦  «         ‰r+t          j        ¦   «         j        j        } || g¦  «         d S t          j        ¦   «         j                             | g¦  «         d S )NzDELETING STACK OBJECTÚtest_leaks_keyzDELETING THREAD STATE)r   r4   rk   Úset_thread_localr5   r6   r7   )ÚjdÚsÚexplicit_reference_to_switchs     €r   Úbackground_greenletz6TestLeaks._check_issue251.<locals>.background_greenlet¬   s—   ø€ å,Ð-DÑEÔEˆBÝÔ×/Ò/Ø Ý+Ð,CÑDÔDñFô Fð Fð
 ,ð :ÝÔ'Ñ)Ô)Ô0Ô7�Ø��2�$‘”���åÔ#Ñ%Ô%Ô,×3Ò3°R°DÑ9Ô9Ð9Ð9Ð9r   c                  ó\  •— t          j         ‰¦  «        } ‰                     t          j        | j        ¦  «        ¦  «         ‰                     | ¦  «         |                      ¦   «          ~ ‰                     ¦   «          ‰                     d¦  «         ‰rt          j        ¦   «          d S d S )NrP   )	r4   rY   rZ   r[   r6   r7   r&   Úwaitr5   )ÚgletÚbackground_glet_killedÚbackground_glet_runningr|   Úbackground_greenletsÚbg_main_wrefsÚmanually_collect_backgrounds    €€€€€€r   Úbackground_threadz4TestLeaks._check_issue251.<locals>.background_thread¼   s§   ø€ ÝÔ$Ð%8Ñ9Ô9ˆDØ× Ò ¥¤¨T¬[Ñ!9Ô!9Ñ:Ô:Ð:à ×'Ò'¨Ñ-Ô-Ð-Ø�KŠK‰MŒMˆMàØ#×'Ò'Ñ)Ô)Ð)Ø"×'Ò'¨Ñ+Ô+Ð+ð
 +ð &ÝÔ#Ñ%Ô%Ð%Ð%Ð%ð&ð &r   rN   rP   Tr   r   )r_   Ú
is_trackedr   r"   r4   r5   Úcount_objectsrQ   ÚEventrR   rS   r~   ÚlistÚlenÚassertFalseÚdeadr&   rT   Úwait_for_pending_cleanupsÚassertLessEqualrk   rl   r=   r   rs   )r   r„   r{   Úgreenlets_beforer…   rU   Úlists_beforeÚlists_afterÚgreenlets_afterr€   r�   r|   r‚   rƒ   s    ``      @@@@@r   Ú_check_issue251zTestLeaks._check_issue251�   s•  øøøøøøø€ õ Œ}˜RÑ Ô Ð Ð Ð Ý#×)Ò)Ñ+Ô+Ð+ÝÔÑÔÐØ×-Ò-­hÔ.?ÈEÐ-ÑRÔRÐå"+¤/Ñ"3Ô"3ÐÝ!*¤Ñ!2Ô!2ÐØ!Ðð	:ð 	:ð 	:ð 	:ð 	:ð ˆð	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&õ$ ÔÐ$5Ð6Ñ6Ô6ˆØ	�Š‰	Œ	ˆ	Ø×$Ò$ RÑ(Ô(Ð(ÝÔÑÔÐØ×)Ò)­$¸4Ð)Ñ@Ô@ˆåÐ'Ñ(Ô(¨AÒ-Ð-Ð-Ð-Ø×ÒÐ-¨aÔ0Ô5Ñ6Ô6Ð6ð !   Ð#Ø×"Ò"Ñ$Ô$Ð$ð 	
�Šˆr‰
Œ
ˆ
Øð 	×&Ò&Ñ(Ô(Ð(à×(Ò(­¸$Ð(Ñ?Ô?ˆØ×,Ò,­XÔ->È5Ð,ÑQÔQˆð
 	×Ò˜[¨,Ñ7Ô7Ð7ð ,ð 	ÝÔ!×HÒHÑJÔJÐVà×Ò˜_Ð.>Ñ?Ô?Ð?Ø*ð Vð × Ò Õ!<Ô!MÍsÉuÌuÑUÔUÐUøð åÔ×DÒDÑFÔFÐRØ×!Ò!Ñ#Ô#Ð#Ð#Ð#ð SÐRr   c                 ó.   — |                       ¦   «          d S r   ©r“   r   s    r   Ú-test_issue251_killing_cross_thread_leaks_listz7TestLeaks.test_issue251_killing_cross_thread_leaks_list  s   € Ø×ÒÑÔÐÐÐr   c                 óô   — t           j                             d¦  «         	 |                      ¦   «          t           j                             d¦  «         d S # t           j                             d¦  «         w xY w)NFT)r4   rk   rn   r“   r   s    r   Ú#test_issue251_with_cleanup_disabledz-TestLeaks.test_issue251_with_cleanup_disabled  sj   € ÝÔ×2Ò2°5Ñ9Ô9Ð9ð	=Ø× Ò Ñ"Ô"Ð"åÔ×6Ò6°tÑ<Ô<Ð<Ð<Ð<ø�HÔ×6Ò6°tÑ<Ô<Ð<Ð<øøøs   ¡A Á!A7c                 ó2   — |                       d¬¦  «         d S )NF©r„   r•   r   s    r   Ú4test_issue251_issue252_need_to_collect_in_backgroundz>TestLeaks.test_issue251_issue252_need_to_collect_in_background  s!   € ð& 	×Ò¸ÐÑ?Ô?Ð?Ð?Ð?r   c                 ó  — d| _         t          j                             d¦  «         	 |                      d¬¦  «         t          j                             d¦  «         d S # t          j                             d¦  «         w xY w)NTFrš   )Úexpect_greenlet_leakr4   rk   rn   r“   r   s    r   ÚEtest_issue251_issue252_need_to_collect_in_background_cleanup_disabledzOTestLeaks.test_issue251_issue252_need_to_collect_in_background_cleanup_disabled*  sw   € à$(ˆÔ!ÝÔ×2Ò2°5Ñ9Ô9Ð9ð	=Ø× Ò ¸UÐ ÑCÔCÐCåÔ×6Ò6°tÑ<Ô<Ð<Ð<Ð<ø�HÔ×6Ò6°tÑ<Ô<Ð<Ð<øøøs   ¨A Á!B c                 ó4   — |                       dd¬¦  «         d S )NFT)r„   r{   r•   r   s    r   Ú9test_issue251_issue252_explicit_reference_not_collectablezCTestLeaks.test_issue251_issue252_explicit_reference_not_collectable3  s/   € à×ÒØ(-Ø)-ð 	ñ 	/ô 	/ð 	/ð 	/ð 	/r   r:   c                 ór   — t           j        d         dk    sJ ‚t          r|                      d¦  «         d S d S )Nr   é   z!Slow and not worth repeating here)r   Úversion_infor
   ÚskipTestr   s    r   Ú_only_test_some_versionsz"TestLeaks._only_test_some_versions;  sH   € õ Ô Ô" aÒ'Ð'Ð'Ð'Ýð 	?Ø�MŠMÐ=Ñ>Ô>Ð>Ð>Ð>ð	?ð 	?r   c                 óž  ‡‡— |                       ¦   «          d„ ŠdŠˆˆfd„}t          d¦  «        D ]} |¦   «          Œ|                      ¦   «         }t          | j        ¦  «        D ]P}t	          ||                      ¦   «         ¦  «        } |¦   «          |                      ¦   «         }||k    r|dk    r nŒQ|                      ||¦  «         d S )Nc                  ó   — dS )Nr   r(   r(   r   r   Úfz:TestLeaks.test_untracked_memory_doesnt_increase.<locals>.fM  s   € Ø�1r   é'  c                  óx   •— t          ‰¦  «        D ](} t          j        ‰¦  «                             ¦   «          Œ)d S r   )r<   r4   r7   )r@   ÚITERr¨   s    €€r   Úrun_itz?TestLeaks.test_untracked_memory_doesnt_increase.<locals>.run_itQ  sB   ø€ Ý˜4‘[”[ð .ð .�ÝÔ! !Ñ$Ô$×+Ò+Ñ-Ô-Ð-Ð-ð.ð .r   r¢   r   )r¥   r<   Úget_process_ussÚUNTRACK_ATTEMPTSÚmaxrŽ   )r   r¬   r@   Ú
uss_beforeÚcountÚ	uss_afterr«   r¨   s         @@r   Ú%test_untracked_memory_doesnt_increasez/TestLeaks.test_untracked_memory_doesnt_increaseF  s	  øø€ ð 	×%Ò%Ñ'Ô'Ð'ð	ð 	ð 	ð ˆð	.ð 	.ð 	.ð 	.ð 	.ð 	.õ
 �q‘”ð 	ð 	ˆAØˆF‰HŒHˆHˆHð
 ×)Ò)Ñ+Ô+ˆ
å˜4Ô0Ñ1Ô1ð 	ð 	ˆEÝ˜Z¨×)=Ò)=Ñ)?Ô)?Ñ@Ô@ˆJØˆF‰HŒHˆHà×,Ò,Ñ.Ô.ˆIØ˜JÒ&Ð&¨5°1ª9¨9Ø�øà×Ò˜Y¨
Ñ3Ô3Ð3Ð3Ð3r   c                 óÈ  ‡‡	‡
‡‡‡— |                       ¦   «          |                      ¦   «          dgŠ	ˆ	fd„ŠdŠ
ˆ
ˆfd„Š| Š G ˆˆˆfd„d¦  «        }d x}}t          | j        ¦  «        D �].}d‰	d<    |¦   «         }t	          j        |¬¦  «        }|                     ¦   «          |                     d¦  «         |                      | 	                    ¦   «         ¦  «         |€|j
        }t          ||j
        ¦  «        }‰r?|                      |j        d	¦  «         |                      ‰	d         ‰
|j        z  ¦  «         ~~‰s|                      ‰	d         d¦  «         ‰r|                      ¦   «          |                      ¦   «         }||k    r|d
k    r n�Œ0|                      ¦   «          |                      ¦   «         }d}|                      |||z   d|fz  ¦  «         d S )Nr   c                  ó¨   •— 	 t          j        ¦   «         j                             ¦   «          n$# t           j        $ r ‰ dxx         dz  cc<   ‚ w xY wdS )Nr   r   )r4   r5   r6   r7   ÚGreenletExit)Ú
EXIT_COUNTs   €r   r¨   z3TestLeaks._check_untracked_memory_thread.<locals>.ft  sg   ø€ ðÝÔ#Ñ%Ô%Ô,×3Ò3Ñ5Ô5Ð5Ð5øÝÔ(ð ð ð Ø˜1��” Ñ"��‘Øðøøøð �1s	   ƒ*. ®!Ar©   c                  óª   •— g } t          ‰¦  «        D ]?}t          j        ‰¦  «        }|                      |¦  «         |                     ¦   «          Œ@| S r   )r<   r4   rY   r7   )Úgletsr@   r?   r«   r¨   s      €€r   r¬   z8TestLeaks._check_untracked_memory_thread.<locals>.run_it}  sR   ø€ ØˆEÝ˜4‘[”[ð ð �õ Ô% aÑ(Ô(�Ø—’˜Q‘”�Ø—’‘
”
�
�
àˆLr   c                   ó.   •— e Zd ZdxZZdZdZˆ ˆˆfd„ZdS )ú<TestLeaks._check_untracked_memory_thread.<locals>.ThreadFuncr   r(   rC   c                 óP  •— ‰                      ¦   «         | _        t          | j        ¦  «        D ]'}| xj        t           ‰¦   «         ¦  «        z  c_        Œ(| j        D ]%}‰                     dt          |¦  «        ¦  «         Œ&‰rd| _        ‰                      ¦   «         | _        d S )Nzsuspended activer(   )	r­   r°   r<   r«   r¹   ÚtupleÚassertInÚstrr²   )r   r@   r?   Údeallocate_in_threadr¬   Útests      €€€r   Ú__call__zETestLeaks._check_untracked_memory_thread.<locals>.ThreadFunc.__call__�  s¢   ø€ Ø"&×"6Ò"6Ñ"8Ô"8�”å˜tœyÑ)Ô)ð 2ð 2�AØ�J”J¥%¨¨©¬¡/¤/Ñ1�J”J�Jàœð >ð >�AØ—M’MÐ"4µc¸!±f´fÑ=Ô=Ð=Ð=à'ð $Ø!#�D”JØ!%×!5Ò!5Ñ!7Ô!7�”��r   N)r#   r$   r%   r°   r²   r¹   r«   rÂ   )rÀ   r¬   rÁ   s   €€€r   Ú
ThreadFuncr»   ‹  sL   ø€ € € € € Ø%&Ð&ˆJ˜ØˆEØˆDð8ð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8r   rÃ   rN   é   r(   r   i  0 zafter attempts %d)r¥   r­   r<   r®   rQ   rR   rS   rT   r‹   Úis_aliver°   r¯   r=   r¹   r«   r�   rŽ   )r   rÀ   rÃ   r°   r²   r±   Úthread_funcrU   Ú	tolerancer·   r«   r¨   r¬   rÁ   s    `       @@@@@r   Ú_check_untracked_memory_threadz(TestLeaks._check_untracked_memory_threadh  sj  øøøøøø€ Ø×%Ò%Ñ'Ô'Ð'ð 	×ÒÑÔÐà�Sˆ
ð	ð 	ð 	ð 	ð 	ð ˆð
	ð 
	ð 
	ð 
	ð 
	ð 
	ð ˆð	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ñ 	8ô 	8ð 	8ð$ "&Ð%ˆ
�YÝ˜4Ô0Ñ1Ô1ð 	ñ 	ˆEØˆJ�q‰MØ$˜*™,œ,ˆKÝÔ ¨Ð4Ñ4Ô4ˆAØ�GŠG‰IŒIˆIØ�FŠF�2‰JŒJˆJØ×Ò˜QŸZšZ™\œ\Ñ*Ô*Ð*àÐ!Ø(Ô3�
å˜Z¨Ô)?Ñ@Ô@ˆJØ#ð IØ× Ò  Ô!2°BÑ7Ô7Ð7Ø× Ò  ¨A¤°°{Ô7GÑ0GÑHÔHÐHàØØ'ð 3Ø× Ò  ¨A¤°Ñ2Ô2Ð2Ø#ð 1Ø×.Ò.Ñ0Ô0Ð0à×,Ò,Ñ.Ô.ˆIà˜JÒ&Ð&¨5°1ª9¨9Ø�ùà×&Ò&Ñ(Ô(Ð(Ø×(Ò(Ñ*Ô*ˆ	ð4 $ˆ	Ø×Ò˜Y¨
°YÑ(>Ø0°E°8Ñ;ñ	=ô 	=ð 	=ð 	=ð 	=r   c                 ó2   — |                       d¬¦  «         d S )NT©rÀ   )rÈ   r   s    r   ÚItest_untracked_memory_doesnt_increase_unfinished_thread_dealloc_in_threadzSTestLeaks.test_untracked_memory_doesnt_increase_unfinished_thread_dealloc_in_threadÙ  s!   € ð 	×+Ò+ÀÐ+ÑFÔFÐFÐFÐFr   c                 ó†   — t           r#t          rt          r|                      d¦  «         |                      d¬¦  «         d S )Nz6Windows 3.14t appears to leak. No other platform does.FrÊ   )r   r   r   r¤   rÈ   r   s    r   ÚGtest_untracked_memory_doesnt_increase_unfinished_thread_dealloc_in_mainzQTestLeaks.test_untracked_memory_doesnt_increase_unfinished_thread_dealloc_in_mainß  sN   € õ ð 	TÕ.ð 	Tµ5ð 	TØ�MŠMÐRÑSÔSÐSØ×+Ò+ÀÐ+ÑGÔGÐGÐGÐGr   N)TF)T)r#   r$   r%   rA   rG   Ústaticmethodr^   rc   ri   rs   r“   r–   r˜   r+   r›   rž   r    r®   r¥   r	   r³   rÈ   rË   rÍ   r(   r   r   r-   r-   3   s¥  € € € € € ðAð Að Að
Ið 
Ið 
Ið ðð ñ „\ðð#ð #ð #ð$#ð #ð #ð.Að Að Að 59Ø5:ð|$ð |$ð |$ð |$ð|ð ð ð=ð =ð =ð ,ð@ð @ñ ,Ô+ð@ð( ,ð=ð =ñ ,Ô+ð=ð ,ð/ð /ñ ,Ô+ð/ð
 Ðð	?ð 	?ð 	?ð ð4ð 4ñ Ôð4ð>o=ð o=ð o=ð o=ðb ðGð Gñ ÔðGð ðHð Hñ ÔðHð Hð Hr   r-   Ú__main__Úunittest)Ú__doc__r   r_   rK   rZ   rQ   r4   Ú r   r   r   r   Ú	leakcheckr   r	   r
   ÚGREENLET_USE_GCÚobjectr   r+   r-   r#   Ú
__import__Úmainr(   r   r   ú<module>rØ      s†  ððð ð €
€
€
Ø 	€	€	€	à €€€Ø €€€Ø Ð Ð Ð ð €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø (Ð (Ð (Ð (Ð (Ð (Ø +Ð +Ð +Ð +Ð +Ð +ð
 ÔÐ Ð Ðð%ð %ð %ð %ð % &ñ %ô %ð %ð !ð !ð !ð{Hð {Hð {Hð {Hð {H�ñ {Hô {Hð {Hðz ˆzÒÐØ€JˆzÑÔ×ÒÑ!Ô!Ð!Ð!Ð!ð Ðr   