§
    VøÁiëI  ã                   ó<  — d Z ddlmZmZm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.
é    )Úprint_functionÚabsolute_importÚdivisionNé   )Ú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     úc/var/www/html/jarvis.com/web/backend/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   Úgetrefcountr7   Úranger:   ÚassertEqual)r   r;   Úrefcount_beforeÚgÚ_s        r   Útest_arg_refszTestLeaks.test_arg_refs7   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+   r6   )Úgkwargss    r   r<   z+TestLeaks.test_kwarg_refs.<locals>.<lambda>F   s&   € ÐA�hÔ1Ñ3Ô3Ô:ÔAÐLÐLÀGÐLÐL€ r   r=   r+   )r@   r   r>   r   r7   r?   r:   )r   ÚkwargsrB   rC   s       r   Útest_kwarg_refszTestLeaks.test_kwarg_refsA   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>.workerV   s   € ÝŒJ�uÑÔÐÐÐr   ©ÚtargetrM   é
   )Ú	threadingÚThreadÚstartrN   rO   Újoin)rP   Úts     r   Ú__recycle_threadszTestLeaks.__recycle_threadsN   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Úrefr7   r8   )Úggs   €r   rP   z,TestLeaks.test_threaded_leak.<locals>.worker_   s.   ø€ à�IŠI•g”k¥(Ô"5Ñ"7Ô"7Ñ8Ô8Ñ9Ô9Ð9Ð9Ð9r   rF   rQ   rS   ©r?   rT   rU   rV   rW   r7   r8   Ú_TestLeaks__recycle_threadsÚgcÚcollectÚassertIsNone©r   rP   rC   rX   rB   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   )r\   r7   r8   )Úlls   €r   Ú
additionalzDTestLeaks.test_threaded_adv_leak.<locals>.worker.<locals>.additionalt   s$   ø€ Ø—	’	�(Ô-Ñ/Ô/Ñ0Ô0Ð0Ð0Ð0r   rF   )r7   r8   rj   r?   r:   r\   r]   r^   )rk   rC   rj   r_   s     @€r   rP   z0TestLeaks.test_threaded_adv_leak.<locals>.workerq   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   rF   rQ   rS   r`   re   s        @r   Útest_threaded_adv_leakz TestLeaks.test_threaded_adv_leako   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   )r7   Ú	_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   r7   rn   Úset_thread_localr8   r9   r:   )Ú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 )NrS   )	r7   r\   r]   r^   r9   r:   r)   Úwaitr8   )Ú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   rQ   rS   Tr   r   )rb   Ú
is_trackedr   r%   r7   r8   Úcount_objectsrT   ÚEventrU   rV   r�   ÚlistÚlenÚassertFalseÚdeadr)   rW   Úwait_for_pending_cleanupsÚassertLessEqualrn   ro   r@   r   rv   )r   r‡   r~   Úgreenlets_beforerˆ   rX   Ú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)r7   rn   rq   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_leakr7   rn   rq   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_collectable5  s/   € à×ÒØ(-Ø)-ð 	ñ 	/ô 	/ð 	/ð 	/ð 	/r   r=   c                 óÌ   — t           j        d         dk    sJ ‚t           j        d d…         dk     r|                      d¦  «         t          r|                      d¦  «         d S d S )Nr   é   rF   )r¥   é   zOnly observed on 3.11z!Slow and not worth repeating here)r   Úversion_infoÚskipTestr   r   s    r   Ú_only_test_some_versionsz"TestLeaks._only_test_some_versions=  sr   € õ Ô Ô" aÒ'Ð'Ð'Ð'ÝÔ˜B˜Q˜BÔ &Ò(Ð(Ø�MŠMÐ1Ñ2Ô2Ð2Ýð 	?Ø�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>.fQ  s   € Ø�1r   é'  c                  óx   •— t          ‰¦  «        D ](} t          j        ‰¦  «                             ¦   «          Œ)d S r   )r?   r7   r:   )rC   ÚITERr¬   s    €€r   Úrun_itz?TestLeaks.test_untracked_memory_doesnt_increase.<locals>.run_itU  sB   ø€ Ý˜4‘[”[ð .ð .�ÝÔ! !Ñ$Ô$×+Ò+Ñ-Ô-Ð-Ð-ð.ð .r   r¥   r   )r©   r?   Úget_process_ussÚUNTRACK_ATTEMPTSÚmaxr‘   )r   r°   rC   Ú
uss_beforeÚcountÚ	uss_afterr¯   r¬   s         @@r   Ú%test_untracked_memory_doesnt_increasez/TestLeaks.test_untracked_memory_doesnt_increaseJ  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|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   )r7   r8   r9   r:   ÚGreenletExit)Ú
EXIT_COUNTs   €r   r¬   z3TestLeaks._check_untracked_memory_thread.<locals>.fx  sg   ø€ ðÝÔ#Ñ%Ô%Ô,×3Ò3Ñ5Ô5Ð5Ð5øÝÔ(ð ð ð Ø˜1��” Ñ"��‘Øðøøøð �1s	   ƒ*. ®!Ar­   c                  óª   •— g } t          ‰¦  «        D ]?}t          j        ‰¦  «        }|                      |¦  «         |                     ¦   «          Œ@| S r   )r?   r7   r\   r:   )ÚgletsrC   rB   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+   rF   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   rC   rB   Ú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Ç   rQ   é   r+   r   zafter attempts %d)r©   r±   r?   r²   rT   rU   rV   rW   rŽ   Úis_aliver´   r³   r@   r½   r¯   r�   r‘   )r   rÄ   rÇ   r´   r¶   rµ   Úthread_funcrX   r»   r¯   r¬   r°   rÅ   s    `      @@@@@r   Ú_check_untracked_memory_threadz(TestLeaks._check_untracked_memory_threadl  sT  øøøøøø€ Ø×%Ò%Ñ'Ô'Ð'ð 	×ÒÑÔÐà�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Ø�ùà×&Ò&Ñ(Ô(Ð(Ø×(Ò(Ñ*Ô*ˆ	Ø×Ò˜Y¨
Ð4GÈ5È(Ñ4RÑSÔSÐSÐSÐSr   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(   rD   rJ   Ústaticmethodra   rf   rl   rv   r–   r™   r›   r.   rž   r¡   r£   r²   r©   r   r·   rË   rÎ   rÐ   r+   r   r   r0   r0   5   s©  € € € € € ðAð Að Að
Ið 
Ið 
Ið ðð ñ „\ðð#ð #ð #ð$#ð #ð #ð.Að Að Að 59Ø5:ð|$ð |$ð |$ð |$ð|ð ð ð=ð =ð =ð ,ð@ð @ñ ,Ô+ð@ð( ,ð=ð =ñ ,Ô+ð=ð ,ð/ð /ñ ,Ô+ð/ð
 Ðð?ð ?ð ?ð ð4ð 4ñ Ôð4ð>TTð TTð TTð TTðl ðGð Gñ ÔðGð ðHð Hñ ÔðHð Hð Hr   r0   Ú__main__Úunittest)Ú__doc__Ú
__future__r   r   r   r   rb   rN   r]   rT   r7   Ú r   r   r	   r
   Ú	leakcheckr   r   r   ÚGREENLET_USE_GCÚobjectr   r.   r0   r&   Ú
__import__Úmainr+   r   r   ú<module>rÜ      s¥  ððð ð AÐ @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @à 
€
€
€
Ø 	€	€	€	à €€€Ø €€€Ø Ð Ð Ð ð €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø (Ð (Ð (Ð (Ð (Ð (Ø +Ð +Ð +Ð +Ð +Ð +ð
 ÔÐ Ð Ðð%ð %ð %ð %ð % &ñ %ô %ð %ð !ð !ð !ðbHð bHð bHð bHð bH�ñ bHô bHð bHðH ˆzÒÐØ€JˆzÑÔ×ÒÑ!Ô!Ð!Ð!Ð!ð Ðr   