ó
    ÷Þ jP  ã                   ó  • S r SSKrSSKrSSKrSSKrSSKrSSKrSSKJr  SSKJ	r	  SSKJ
r
  SSKJr  SSKJr  SS	KJr  SS
KJr  \R                   (       d   e " S S\5      rS r " S S\5      r\S:X  a  \" S5      R/                  5         gg)z)
Testing scenarios that may have leaked.
é    Né   )ÚTestCase)ÚPY314)ÚRUNNING_ON_FREETHREAD_BUILD)ÚWIN)Úfails_leakcheck)Úignores_leakcheck)ÚRUNNING_ON_MANYLINUXc                   óD   • \ rS rSr\" 5       rS rS rS r\	S 5       r
Srg)ÚHasFinalizerTracksInstancesé   c                 ó‚   • [         R                  " U5      U l        U R                  R	                  [        U 5      5        g ©N)ÚsysÚinternÚmsgÚEXTANT_INSTANCESÚaddÚid)Úselfr   s     ÚS/var/www/html/gaurav/venv/lib/python3.13/site-packages/greenlet/tests/test_leaks.pyÚ__init__Ú$HasFinalizerTracksInstances.__init__   s)   € Ü—:’:˜c“?ˆŒØ×Ñ×!Ñ!¤" T£(Õ+ó    c                 óL   • U R                   R                  [        U 5      5        g r   )r   Úremover   ©r   s    r   Ú__del__Ú#HasFinalizerTracksInstances.__del__    s   € Ø×Ñ×$Ñ$¤R¨£XÕ.r   c                 ó6   • S[        U 5      U R                  4-  $ )Nz(<HasFinalizerTracksInstances at 0x%x %r>)r   r   r   s    r   Ú__repr__Ú$HasFinalizerTracksInstances.__repr__"   s!   € Ø9Üˆt‹H�d—h‘hð=
ñ 
ð 	
r   c                 ó8   • U R                   R                  5         g r   )r   Úclear)Úclss    r   ÚresetÚ!HasFinalizerTracksInstances.reset&   s   € à×Ñ×"Ñ"Õ$r   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Úsetr   r   r   r!   Úclassmethodr&   Ú__static_attributes__© r   r   r   r      s-   † Ù“uÐò,ò/ò
ð ñ%ó ó%r   r   c                 ó2   • [         (       a  U $ [        U 5      $ r   )r   r   )Úfuncs    r   Ú&fails_leakcheck_except_on_free_thradedr2   +   s   € ß"Ò"ð ˆÜ˜4Ó Ð r   c                   óÐ   • \ rS rSrS rS r\S 5       rS rS r	S r
  SS jrS	 rS
 r\S 5       r\S 5       r\S 5       rSrS r\S 5       rSS jr\S 5       r\S 5       rSrg)Ú	TestLeaksé3   c                 óð   • Sn[         R                  " U5      n[        R                  " S 5      n[        S5       H  nUR                  " U6   M     U R                  [         R                  " U5      U5        g )N)ÚaÚbÚcc                  óZ   • [         R                  " 5       R                  R                  " U 6 $ r   ©ÚgreenletÚ
getcurrentÚparentÚswitch)Úargss    r   Ú<lambda>Ú)TestLeaks.test_arg_refs.<locals>.<lambda>:   s   € œ(×-Ò-Ó/×6Ñ6×=Ò=¸tÑDr   éd   )r   Úgetrefcountr<   Úranger?   ÚassertEqual)r   r@   Úrefcount_beforeÚgÚ_s        r   Útest_arg_refsÚTestLeaks.test_arg_refs5   s[   € ØˆÜŸ/š/¨$Ó/ˆä×ÒÙDóFˆä�s–ˆAØ�HŠH�d‹Oñ à×ÑœŸš¨Ó.°Õ@r   c                 óT  • 0 nU R                  [        R                  " U5      [        (       d  SOS5        [        R                  " S 5      n[        S5       H  nUR                  " S0 UD6  M     U R                  [        R                  " U5      [        (       d  S5        g S5        g )Né   r   c                  ó`   • [         R                  " 5       R                  R                  " S0 U D6$ )Nr/   r;   )Úgkwargss    r   rA   Ú+TestLeaks.test_kwarg_refs.<locals>.<lambda>D   s!   € œh×1Ò1Ó3×:Ñ:×AÒAÑLÀGÒLr   rC   r/   )rF   r   rD   r   r<   rE   r?   )r   ÚkwargsrH   rI   s       r   Útest_kwarg_refsÚTestLeaks.test_kwarg_refs?   s{   € ØˆØ×ÑœŸš¨Ó0¿5º5±!ÀaÔHä×ÒÙLóNˆä�s–ˆAØ�HŠHÑ�vÔñ ð 	×ÑœŸš¨Ó0¿5º5°!ÕHÀaÕHr   c                  ó    • S n [         R                  " U S9nUR                  5         [        R                  " S5        UR                  S5        g )Nc                  ó0   • [         R                  " S5        g )Nçü©ñÒMbP?)ÚtimeÚsleepr/   r   r   ÚworkerÚ+TestLeaks.__recycle_threads.<locals>.workerT   s   € Ü�JŠJ�uÕr   ©ÚtargetrV   é
   )Ú	threadingÚThreadÚstartrW   rX   Újoin)rY   Úts     r   Ú__recycle_threadsÚTestLeaks.__recycle_threadsL   s7   € ò	ä×Ò FÑ+ˆØ	�‰Œ	Ü�
Š
�5ÔØ	�‰ˆr�
r   c                 ó¬  ^• / mU4S jn[        S5       H9  n[        R                  " US9nUR                  5         UR	                  S5        AM;     [
        R                  " 5         U R                  5         [
        R                  " 5         [        R                  " 5         [
        R                  " 5         T H  nU R                  U" 5       5        M     g )Nc                  óv   >• T R                  [        R                  " [        R                  " 5       5      5        g r   )ÚappendÚweakrefÚrefr<   r=   )Úggs   €r   rY   Ú,TestLeaks.test_threaded_leak.<locals>.worker]   s!   ø€ à�I‰I”g—k’k¤(×"5Ò"5Ó"7Ó8Õ9r   rM   r[   r]   ©rE   r^   r_   r`   ra   r<   r=   Ú_TestLeaks__recycle_threadsÚgcÚcollectÚassertIsNone©r   rY   rI   rb   rH   rj   s        @r   Útest_threaded_leakÚTestLeaks.test_threaded_leak[   s™   ø€ Øˆõ	:ô �q–ˆAÜ× Ò ¨Ñ/ˆAØ�G‰GŒIØ�F‰F�2ŒJÚñ	 ô
 	×ÒÔØ×ÑÔ Ü×ÒÔÜ
�
Š
ŒÜ×ÒÔÛˆAØ×Ñ™a›cÖ"ò r   c                 ó¬  ^• / mU4S jn[        S5       H9  n[        R                  " US9nUR                  5         UR	                  S5        AM;     [
        R                  " 5         U R                  5         [
        R                  " 5         [        R                  " 5         [
        R                  " 5         T H  nU R                  U" 5       5        M     g )Nc                  ó(  >^• / =m[         R                  " 5       l        U4S jn [        S5       H'  n[         R                   " U 5      R	                  5         M)     TR                  [        R                  " [         R                  " 5       5      5        g )Nc                  óN   >• T R                  [        R                  " 5       5        g r   )rg   r<   r=   )Úlls   €r   Ú
additionalÚDTestLeaks.test_threaded_adv_leak.<locals>.worker.<locals>.additionalr   s   ø€ Ø—	‘	œ(×-Ò-Ó/Õ0r   rM   )r<   r=   rw   rE   r?   rg   rh   ri   )rx   rI   rw   rj   s     @€r   rY   Ú0TestLeaks.test_threaded_adv_leak.<locals>.workero   sa   ù€ à,.Ð.ˆB”×$Ò$Ó&Ô)õ1ä˜1–X�Ü×!Ò! *Ó-×4Ñ4Ö6ñ à�I‰I”g—k’k¤(×"5Ò"5Ó"7Ó8Õ9r   rM   r[   r]   rl   rq   s        @r   Útest_threaded_adv_leakÚ TestLeaks.test_threaded_adv_leakm   s™   ø€ Øˆõ	:ô �q–ˆAÜ× Ò ¨Ñ/ˆAØ�G‰GŒIØ�F‰F�2ŒJÚñ	 ô
 	×ÒÔØ×ÑÔ Ü×ÒÔÜ
�
Š
ŒÜ×ÒÔÛˆAØ×Ñ™a›cÖ"ò r   c                 óT  • [         R                  R                  5       nU R                  US5        [         R                  R	                  S5        [         R                  R                  5       nU R                  X5        U R                  [         R                  R                  S5        g )Nr   Tr   )r<   Ú	_greenletÚ&get_clocks_used_doing_optional_cleanupÚassertGreaterEqualÚenable_optional_cleanuprF   ÚassertGreaterÚCLOCKS_PER_SEC)r   ÚusedÚused2s      r   ÚassertClocksUsedÚTestLeaks.assertClocksUsed„   sx   € Ü×!Ñ!×HÑHÓJˆØ×Ñ  aÔ(ä×Ñ×2Ñ2°4Ô8Ü×"Ñ"×IÑIÓKˆØ×Ñ˜Ô%Ø×Ñœ8×-Ñ-×<Ñ<¸aÕ@r   c                 ó–  ^^^	^
^^^• [         R                  " / 5      (       d   e[        R                  5         [        R
                  " 5         U R                  [        R                  SS9n[        R                  " 5       m
[        R                  " 5       m	/ mU4S jm/ mU	U
UUUU4S jn[        R                  " US9nUR                  5         T
R                  S5        [        R
                  " 5         U R                  [        SS9n[        T5      S:X  d   eU R                  TS	   R                  5        TS S 2	 T	R!                  5         UR#                  S5        AU R%                  5         U R                  [        SS9nU R                  [        R                  SS9nU R'                  Xv5        T(       d`  [        R(                  R+                  5       bA  U R-                  Xƒ5        T(       a(  U R-                  [        R.                  [!        5       5        O [        R(                  R+                  5       b  U R1                  5         g g )
NF)Ú
exact_kindc                  ó@  >• [        S5      n [        R                  R                  S[        S5      5        T(       a3  [        R                  " 5       R
                  R                  nU" U /5        g [        R                  " 5       R
                  R                  U /5        g )NzDELETING STACK OBJECTÚtest_leaks_keyzDELETING THREAD STATE)r   r<   r~   Úset_thread_localr=   r>   r?   )ÚjdÚsÚexplicit_reference_to_switchs     €r   Úbackground_greenletÚ6TestLeaks._check_issue251.<locals>.background_greenlet¬   sv   ø€ ä,Ð-DÓEˆBÜ×Ñ×/Ñ/Ø Ü+Ð,CÓDôFö
 ,Ü×'Ò'Ó)×0Ñ0×7Ñ7�Ù�2�$•ä×#Ò#Ó%×,Ñ,×3Ñ3°R°DÕ9r   c                  óP  >• [         R                   " T5      n TR                  [        R                  " U R                  5      5        TR                  U 5        U R                  5         A TR                  5         TR                  S5        T(       a  [         R                  " 5         g g )Nr]   )	r<   rg   rh   ri   r>   r?   r,   Úwaitr=   )ÚgletÚbackground_glet_killedÚbackground_glet_runningr�   Úbackground_greenletsÚbg_main_wrefsÚmanually_collect_backgrounds    €€€€€€r   Úbackground_threadÚ4TestLeaks._check_issue251.<locals>.background_thread¼   sy   ø€ Ü×$Ò$Ð%8Ó9ˆDØ× Ñ ¤§¢¨T¯[©[Ó!9Ô:à ×'Ñ'¨Ô-Ø�K‰KŒMàØ#×'Ñ'Ô)Ø"×'Ñ'¨Ô+ö
 +Ü×#Ò#Õ%ð +r   r[   r]   Tr   r   )rn   Ú
is_trackedr   r&   r<   r=   Úcount_objectsr^   ÚEventr_   r`   r“   ÚlistÚlenÚassertFalseÚdeadr,   ra   Úwait_for_pending_cleanupsÚassertLessEqualr~   r   rF   r   r†   )r   r™   r�   Úgreenlets_beforerš   rb   Úlists_beforeÚlists_afterÚgreenlets_afterr•   r–   r�   r—   r˜   s    ``      @@@@@r   Ú_check_issue251ÚTestLeaks._check_issue251�   sä  þ€ ô �}Š}˜R× Ñ Ð Ð Ü#×)Ñ)Ô+Ü×ÒÔØ×-Ñ-¬h×.?Ñ.?ÈEÐ-ÐRÐä"+§/¢/Ó"3ÐÜ!*§¢Ó!2ÐØ!Ðõ	:ð ˆ÷	&ò 	&ô$ ×ÒÐ$5Ñ6ˆØ	�‰Œ	Ø×$Ñ$ RÔ(Ü×ÒÔØ×)Ñ)¬$¸4Ð)Ð@ˆäÐ'Ó(¨AÓ-Ð-Ð-Ø×ÑÐ-¨aÑ0×5Ñ5Ô6ð !¢Ð#Ø×"Ñ"Ô$ð 	
�‰ˆrŒ
Øð 	×&Ñ&Ô(à×(Ñ(¬¸$Ð(Ð?ˆØ×,Ñ,¬X×->Ñ->È5Ð,ÐQˆð
 	×Ñ˜[Ô7ö ,Ü×!Ñ!×HÑHÓJÑVà×Ñ˜_Ô?Þ*ð × Ñ Ô!<×!MÑ!MÌsËuÔUøð ä×Ñ×DÑDÓFÑRØ×!Ñ!Õ#ð Sr   c                 ó$   • U R                  5         g r   ©r©   r   s    r   Ú-test_issue251_killing_cross_thread_leaks_listÚ7TestLeaks.test_issue251_killing_cross_thread_leaks_list  s   € Ø×ÑÕr   c                 óê   • [         R                  R                  S5         U R                  5         [         R                  R                  S5        g ! [         R                  R                  S5        f = f)NFT)r<   r~   r�   r©   r   s    r   Ú#test_issue251_with_cleanup_disabledÚ-TestLeaks.test_issue251_with_cleanup_disabled  sP   € Ü×Ñ×2Ñ2°5Ô9ð	=Ø× Ñ Ô"ä×Ñ×6Ñ6°tÕ<øŒH×Ñ×6Ñ6°tÕ<ús   ¡A Á!A2c                 ó"   • U R                  SS9  g )NF©r™   r¬   r   s    r   Ú4test_issue251_issue252_need_to_collect_in_backgroundÚ>TestLeaks.test_issue251_issue252_need_to_collect_in_background  s   € ð& 	×Ñ¸ÐÒ?r   c                 óö   • SU l         [        R                  R                  S5         U R	                  SS9  [        R                  R                  S5        g ! [        R                  R                  S5        f = f)NTFr³   )Úexpect_greenlet_leakr<   r~   r�   r©   r   s    r   ÚEtest_issue251_issue252_need_to_collect_in_background_cleanup_disabledÚOTestLeaks.test_issue251_issue252_need_to_collect_in_background_cleanup_disabled*  s]   € à$(ˆÔ!Ü×Ñ×2Ñ2°5Ô9ð	=Ø× Ñ ¸UÐ ÑCä×Ñ×6Ñ6°tÕ<øŒH×Ñ×6Ñ6°tÕ<ús   ¨A Á!A8c                 ó$   • U R                  SSS9  g )NFT)r™   r�   r¬   r   s    r   Ú9test_issue251_issue252_explicit_reference_not_collectableÚCTestLeaks.test_issue251_issue252_explicit_reference_not_collectable3  s   € à×ÑØ(-Ø)-ð 	ò 	/r   rC   c                 óp   • [         R                  S   S:¼  d   e[        (       a  U R                  S5        g g )Nr   é   z!Slow and not worth repeating here)r   Úversion_infor
   ÚskipTestr   s    r   Ú_only_test_some_versionsÚ"TestLeaks._only_test_some_versions;  s5   € ô ×Ñ Ñ" aÓ'Ð'Ð'ßÒØ�M‰MÐ=Õ>ð  r   c                 ól  ^^• U R                  5         S mSmUU4S jn[        S5       H
  nU" 5         M     U R                  5       n[        U R                  5       HB  n[	        X0R                  5       5      nU" 5         U R                  5       nXS::  d  M:  US:”  d  MB    O   U R                  WU5        g )Nc                  ó   • g)Nr   r/   r/   r   r   ÚfÚ:TestLeaks.test_untracked_memory_doesnt_increase.<locals>.fM  s   € Ør   é'  c                  ór   >• [        T5       H'  n [        R                  " T5      R                  5         M)     g r   )rE   r<   r?   )rI   ÚITERrÅ   s    €€r   Úrun_itÚ?TestLeaks.test_untracked_memory_doesnt_increase.<locals>.run_itQ  s(   ø€ Ü˜4–[�Ü×!Ò! !Ó$×+Ñ+Ö-ò !r   r¾   r   )rÁ   rE   Úget_process_ussÚUNTRACK_ATTEMPTSÚmaxr¤   )r   rÊ   rI   Ú
uss_beforeÚcountÚ	uss_afterrÉ   rÅ   s         @@r   Ú%test_untracked_memory_doesnt_increaseÚ/TestLeaks.test_untracked_memory_doesnt_increaseF  s£   ù€ ð 	×%Ñ%Ô'ò	ð ˆö	.ô
 �q–ˆAÙŽHñ ð ×)Ñ)Ó+ˆ
ä˜4×0Ñ0Ö1ˆEÜ˜Z×)=Ñ)=Ó)?Ó@ˆJÙŒHà×,Ñ,Ó.ˆIØÕ&¨5°1­9Ùñ 2ð 	×Ñ˜Y¨
Õ3r   c                 óŠ  ^^	^
^^^• U R                  5         U R                  5         S/m	U	4S jmSm
U
U4S jmU m " UUU4S jS5      nS =p4[        U R                  5       GH"  nST	S'   U" 5       n[        R
                  " US9nUR                  5         UR                  S5        U R                  UR                  5       5        Uc  UR                  n[        X6R                  5      nT(       a>  U R                  UR                  S	5        U R                  T	S   T
UR                  -  5        AAT(       d  U R                  T	S   S5        T(       a  U R                  5         U R                  5       nXC::  d  GM  US
:”  d  GM#    O   U R                  5         U R                  5       nSnU R!                  XCU-   SW4-  5        g )Nr   c                  ó®   >•  [         R                  " 5       R                  R                  5         g! [         R                   a    T S==   S-  ss'   e f = f)Nr   r   )r<   r=   r>   r?   ÚGreenletExit)Ú
EXIT_COUNTs   €r   rÅ   Ú3TestLeaks._check_untracked_memory_thread.<locals>.ft  sP   ø€ ðÜ×#Ò#Ó%×,Ñ,×3Ñ3Ô5ð øô ×(Ñ(ó Ø˜1“ Ñ"“Øðús	   ƒ-1 ±#ArÇ   c                  óž   >• / n [        T5       H:  n[        R                  " T5      nU R                  U5        UR                  5         M<     U $ r   )rE   r<   rg   r?   )ÚgletsrI   rH   rÉ   rÅ   s      €€r   rÊ   Ú8TestLeaks._check_untracked_memory_thread.<locals>.run_it}  sC   ø€ ØˆEÜ˜4–[�ô ×%Ò% aÓ(�Ø—‘˜Q”Ø—‘–
ñ !ð ˆLr   c                   ó6   >• \ rS rSrS=rrSrSrU UU4S jrSr	g)Ú<TestLeaks._check_untracked_memory_thread.<locals>.ThreadFunci‹  r   r/   rM   c                 óP  >• TR                  5       U l        [        U R                  5       H&  nU =R                  [        T" 5       5      -  sl        M(     U R                   H  nTR                  S[        U5      5        M      T(       a  SU l        TR                  5       U l        g )Nzsuspended activer/   )	rÌ   rÏ   rE   rÉ   rÚ   ÚtupleÚassertInÚstrrÑ   )r   rI   rH   Údeallocate_in_threadrÊ   Útests      €€€r   Ú__call__ÚETestLeaks._check_untracked_memory_thread.<locals>.ThreadFunc.__call__�  sy   ø€ Ø"&×"6Ñ"6Ó"8�”ä˜tŸy™yÖ)�AØ—J’J¤%©«£/Ñ1—Jñ *ð Ÿœ�AØ—M‘MÐ"4´c¸!³fÖ=ñ $ö (Ø!#�D”JØ!%×!5Ñ!5Ó!7�•r   )rÚ   rÑ   rÏ   N)
r(   r)   r*   r+   rÏ   rÑ   rÚ   rÉ   rä   r.   )râ   rÊ   rã   s   €€€r   Ú
ThreadFuncrÝ   ‹  s!   ø† Ø%&Ð&ˆJ˜ØˆEØˆD÷8ò 8r   ræ   r[   é   r/   r   i  0 zafter attempts %d)rÁ   rÌ   rE   rÍ   r^   r_   r`   ra   r¡   Úis_aliverÏ   rÎ   rF   rÚ   rÉ   r£   r¤   )r   râ   ræ   rÏ   rÑ   rÐ   Úthread_funcrb   Ú	tolerancer×   rÉ   rÅ   rÊ   rã   s    `       @@@@@r   Ú_check_untracked_memory_threadÚ(TestLeaks._check_untracked_memory_threadh  s‘  ý€ Ø×%Ñ%Ô'ð 	×ÑÔà�Sˆ
õ	ð ˆö
	ð ˆ÷	8ö 	8ð$ "&Ð%ˆ
Ü˜4×0Ñ0×1ˆEØˆJ�q‰MÙ$›,ˆKÜ× Ò ¨Ñ4ˆAØ�G‰GŒIØ�F‰F�2ŒJØ×Ñ˜QŸZ™Z›\Ô*àÑ!Ø(×3Ñ3�
ä˜Z×)?Ñ)?Ó@ˆJÞ#Ø× Ñ  ×!2Ñ!2°BÔ7Ø× Ñ  ¨A¡°°{×7GÑ7GÑ0GÔHàØÞ'Ø× Ñ  ¨A¡°Ô2Þ#Ø×.Ñ.Ô0à×,Ñ,Ó.ˆIàÖ&¨5°1®9Ùñ5 2ð8 	×&Ñ&Ô(Ø×(Ñ(Ó*ˆ	ð4 $ˆ	Ø×Ñ˜Y°YÑ(>Ø0°E°8Ñ;õ	=r   c                 ó"   • U R                  SS9  g )NT©râ   )rë   r   s    r   ÚItest_untracked_memory_doesnt_increase_unfinished_thread_dealloc_in_threadÚSTestLeaks.test_untracked_memory_doesnt_increase_unfinished_thread_dealloc_in_threadÙ  s   € ð 	×+Ñ+ÀÐ+ÒFr   c                 ó†   • [         (       a'  [        (       a  [        (       a  U R                  S5        U R	                  SS9  g )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_mainÚQTestLeaks.test_untracked_memory_doesnt_increase_unfinished_thread_dealloc_in_mainß  s1   € ÷ Š3×.Ò.·5²5Ø�M‰MÐRÔSØ×+Ñ+ÀÐ+ÒGr   )r·   N)TF)T)r(   r)   r*   r+   rJ   rR   Ústaticmethodrm   rr   r{   r†   r©   r­   r°   r2   r´   r¸   r»   rÍ   rÁ   r	   rÒ   rë   rï   rò   r.   r/   r   r   r4   r4   3   sÝ   † òAò
Ið ñó ðò#ò$#ò.Að 59Ø5:ô|$ò|ò=ð ,ñ@ó ,ð@ð( ,ñ=ó ,ð=ð ,ñ/ó ,ð/ð
 Ðò	?ð ñ4ó ð4ô>o=ðb ñGó ðGð ñHó óHr   r4   Ú__main__Úunittest)Ú__doc__r   rn   rW   rh   r^   r<   Ú r   r   r   r   Ú	leakcheckr   r	   r
   ÚGREENLET_USE_GCÚobjectr   r2   r4   r(   Ú
__import__Úmainr/   r   r   Ú<module>rþ      sˆ   ðñó Û 	ã Û Û ó Ý Ý Ý )Ý Ý &Ý (Ý +ð
 ××Ð Ðô% &ô %ò !ô{H�ô {Hðz ˆzÓÙˆzÓ×ÑÕ!ð r   