Ë
    V.jM  ã                   ó  — 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«      j/                  «        yy)z)
Testing scenarios that may have leaked.
é    Né   )ÚTestCase)ÚPY314)ÚRUNNING_ON_FREETHREAD_BUILD)ÚWIN)Úfails_leakcheck)Úignores_leakcheck)ÚRUNNING_ON_MANYLINUXc                   ó<   — e Zd Z e«       Zd„ Zd„ Zd„ Zed„ «       Z	y)ÚHasFinalizerTracksInstancesc                 ó€   — t        j                  |«      | _        | j                  j	                  t        | «      «       y ©N)ÚsysÚinternÚmsgÚEXTANT_INSTANCESÚaddÚid)Úselfr   s     ú[C:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\greenlet/tests/test_leaks.pyÚ__init__z$HasFinalizerTracksInstances.__init__   s)   € Ü—:‘:˜c“?ˆŒØ×Ñ×!Ñ!¤" T£(Õ+ó    c                 óL   — | j                   j                  t        | «      «       y r   )r   Úremover   ©r   s    r   Ú__del__z#HasFinalizerTracksInstances.__del__    s   € Ø×Ñ×$Ñ$¤R¨£XÕ.r   c                 ó6   — 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�d—h‘hð=
ñ 
ð 	
r   c                 ó8   — | j                   j                  «        y r   )r   Úclear)Úclss    r   Úresetz!HasFinalizerTracksInstances.reset&   s   € à×Ñ×"Ñ"Õ$r   N)
Ú__name__Ú
__module__Ú__qualname__Úsetr   r   r   r   Úclassmethodr"   © r   r   r   r      s-   „ Ù“uÐò,ò/ò
ð ñ%ó ñ%r   r   c                 ó(   — 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y)Ú	TestLeaksc                 óæ   — d}t        j                  |«      }t        j                  d„ «      }t        d«      D ]  } |j                  |Ž  Œ | j                  t        j                  |«      |«       y )N)ÚaÚbÚcc                  óX   —  t        j                  «       j                  j                  | Ž S r   ©ÚgreenletÚ
getcurrentÚparentÚswitch)Úargss    r   Ú<lambda>z)TestLeaks.test_arg_refs.<locals>.<lambda>:   s!   € Ð=œ(×-Ñ-Ó/×6Ñ6×=Ñ=¸tÑDr   éd   )r   Úgetrefcountr4   Úranger7   ÚassertEqual)r   r8   Úrefcount_beforeÚgÚ_s        r   Útest_arg_refszTestLeaks.test_arg_refs5   s]   € ØˆÜŸ/™/¨$Ó/ˆä×ÑÙDóFˆä�s–ˆAØˆA�H‰H�dŠOð à×ÑœŸ™¨Ó.°Õ@r   c                 ó6  — i }| j                  t        j                  |«      t        sdnd«       t	        j                  d„ «      }t        d«      D ]  } |j                  di |¤Ž Œ | j                  t        j                  |«      t        sd«       y d«       y )Né   r   c                  ó^   —  t        j                  «       j                  j                  di | ¤ŽS )Nr(   r3   )Úgkwargss    r   r9   z+TestLeaks.test_kwarg_refs.<locals>.<lambda>D   s$   € ÐAœh×1Ñ1Ó3×:Ñ:×AÑAÑLÀGÒLr   r:   r(   )r=   r   r;   r   r4   r<   r7   )r   Úkwargsr?   r@   s       r   Útest_kwarg_refszTestLeaks.test_kwarg_refs?   sy   € ØˆØ×ÑœŸ™¨Ó0½5±!ÀaÔHä×ÑÙLóNˆä�s–ˆAØˆA�H‰HÑ�vÓð ð 	×ÑœŸ™¨Ó0½5°!ÕHÀaÕHr   c                  ó¢   — d„ } t        j                  | ¬«      }|j                  «        t        j                  d«       |j                  d«       y )Nc                  ó.   — t        j                  d«       y )Nçü©ñÒMbP?)ÚtimeÚsleepr(   r   r   Úworkerz+TestLeaks.__recycle_threads.<locals>.workerT   s   € Ü�J‰J�uÕr   ©ÚtargetrJ   é
   )Ú	threadingÚThreadÚstartrK   rL   Újoin)rM   Úts     r   Ú__recycle_threadszTestLeaks.__recycle_threadsL   s7   € ò	ä×Ñ FÔ+ˆØ	�‰Œ	Ü�
‰
�5ÔØ	�‰ˆr�
r   c                 óž  ‡— g Šˆfd„}t        d«      D ]:  }t        j                  |¬«      }|j                  «        |j	                  d«       ~Œ< t        j                  «        | j                  «        t        j                  «        t        j                  «        t        j                  «        ‰D ]  }| j                   |«       «       Œ y )Nc                  ór   •— ‰ j                  t        j                  t        j                  «       «      «       y r   )ÚappendÚweakrefÚrefr4   r5   )Úggs   €r   rM   z,TestLeaks.test_threaded_leak.<locals>.worker]   s!   ø€ à�I‰I”g—k‘k¤(×"5Ñ"5Ó"7Ó8Õ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Ø�F‰F�2ŒJÙð	 ô
 	×ÑÔØ×ÑÔ Ü×ÑÔÜ
�
‰
ŒÜ×ÑÔÛˆAØ×Ñ™a›cÕ"ñ r   c                 óž  ‡— g Šˆfd„}t        d«      D ]:  }t        j                  |¬«      }|j                  «        |j	                  d«       ~Œ< t        j                  «        | j                  «        t        j                  «        t        j                  «        t        j                  «        ‰D ]  }| j                   |«       «       Œ y )Nc                  ó  •‡— g xŠt        j                  «       _        ˆfd„} t        d«      D ]%  }t        j                   | «      j	                  «        Œ' ‰j                  t        j                  t        j                  «       «      «       y )Nc                  óL   •— ‰ j                  t        j                  «       «       y r   )rY   r4   r5   )Úlls   €r   Ú
additionalzDTestLeaks.test_threaded_adv_leak.<locals>.worker.<locals>.additionalr   s   ø€ Ø—	‘	œ(×-Ñ-Ó/Õ0r   rC   )r4   r5   rg   r<   r7   rY   rZ   r[   )rh   r@   rg   r\   s     @€r   rM   z0TestLeaks.test_threaded_adv_leak.<locals>.workero   sa   ù€ à,.Ð.ˆB”×$Ñ$Ó&Ô)ô1ä˜1–X�Ü×!Ñ! *Ó-×4Ñ4Õ6ð à�I‰I”g—k‘k¤(×"5Ñ"5Ó"7Ó8Õ9r   rC   rN   rP   r]   rb   s        @r   Útest_threaded_adv_leakz TestLeaks.test_threaded_adv_leakm   s™   ø€ Øˆô	:ô �q–ˆAÜ× Ñ ¨Ô/ˆAØ�G‰GŒIØ�F‰F�2ŒJÙð	 ô
 	×ÑÔØ×ÑÔ Ü×ÑÔÜ
�
‰
ŒÜ×ÑÔÛˆAØ×Ñ™a›cÕ"ñ r   c                 óV  — t         j                  j                  «       }| j                  |d«       t         j                  j	                  d«       t         j                  j                  «       }| j                  ||«       | j                  t         j                  j                  d«       y )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„   sz   € Ü×!Ñ!×HÑHÓJˆØ×Ñ  aÔ(ä×Ñ×2Ñ2°4Ô8Ü×"Ñ"×IÑIÓKˆØ×Ñ˜˜uÔ%Ø×Ñœ8×-Ñ-×<Ñ<¸aÕ@r   c                 ó„  ‡‡‡	‡
‡‡‡— t        j                  g «      sJ ‚t        j                  «        t	        j
                  «        | j                  t        j                  d¬«      }t        j                  «       Š
t        j                  «       Š	g Šˆfd„Šg Šˆ	ˆ
ˆˆˆˆfd„}t        j                  |¬«      }|j                  «        ‰
j                  d«       t	        j
                  «        | j                  t        d¬«      }t        ‰«      dk(  sJ ‚| j                  ‰d	   j                  «       ‰d d …= ‰	j!                  «        |j#                  d«       ~| j%                  «        | j                  t        d¬«      }| j                  t        j                  d¬«      }| j'                  ||«       ‰s[t        j(                  j+                  «       �=| j-                  ||«       ‰r*| j-                  t        j.                  t!        «       «       n	 t        j(                  j+                  «       �| j1                  «        y y )
NF)Ú
exact_kindc                  ó2  •— t        d«      } t        j                  j                  dt        d«      «       ‰r2t        j                  «       j
                  j                  } || g«       y t        j                  «       j
                  j                  | g«       y )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¬   sv   ø€ ä,Ð-DÓEˆBÜ×Ñ×/Ñ/Ø Ü+Ð,CÓDôFñ
 ,Ü×'Ñ'Ó)×0Ñ0×7Ñ7�Ù�2�$•ä×#Ñ#Ó%×,Ñ,×3Ñ3°R°DÕ9r   c                  ó@  •— t        j                   ‰«      } ‰j                  t        j                  | j                  «      «       ‰j                  | «       | j                  «        ~ ‰j                  «        ‰j                  d«       ‰rt        j                  «        y y )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¼   sy   ø€ Ü×$Ñ$Ð%8Ó9ˆDØ× Ñ ¤§¡¨T¯[©[Ó!9Ô:à ×'Ñ'¨Ô-Ø�K‰KŒ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Ðä"+§/¡/Ó"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                 ó$   — | j                  «        y r   ©r“   r   s    r   Ú-test_issue251_killing_cross_thread_leaks_listz7TestLeaks.test_issue251_killing_cross_thread_leaks_list  s   € Ø×ÑÕr   c                 óê   — t         j                  j                  d«       	 | j                  «        t         j                  j                  d«       y # t         j                  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  sP   € Ü×Ñ×2Ñ2°5Ô9ð	=Ø× Ñ Ô"ä×Ñ×6Ñ6°tÕ<øŒH×Ñ×6Ñ6°tÕ<ús   ¡A Á!A2c                 ó(   — | j                  d¬«       y )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                  j                  d«       	 | j	                  d¬«       t        j                  j                  d«       y # t        j                  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*  s]   € à$(ˆÔ!Ü×Ñ×2Ñ2°5Ô9ð	=Ø× Ñ ¸UÐ ÔCä×Ñ×6Ñ6°tÕ<øŒH×Ñ×6Ñ6°tÕ<ús   ¨A Á!A;c                 ó*   — | j                  dd¬«       y )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                 ód   — t         j                  d   dk\  sJ ‚t        r| j                  d«       y y )Nr   é   z!Slow and not worth repeating here)r   Úversion_infor
   ÚskipTestr   s    r   Ú_only_test_some_versionsz"TestLeaks._only_test_some_versions;  s2   € ô ×Ñ Ñ" aÒ'Ð'Ð'ÝØ�M‰MÐ=Õ>ð  r   c                 ó`  ‡‡— | j                  «        d„ ŠdŠˆˆfd„}t        d«      D ]	  } |«        Œ | j                  «       }t        | j                  «      D ]@  }t	        || j                  «       «      } |«        | j                  «       }||k  sŒ:|dkD  sŒ@ n | j                  |«       y )Nc                   ó   — y)Nr   r(   r(   r   r   Úfz:TestLeaks.test_untracked_memory_doesnt_increase.<locals>.fM  s   € Ør   é'  c                  ól   •— t        ‰«      D ]%  } t        j                  ‰«      j                  «        Œ' y r   )r<   r4   r7   )r@   ÚITERr¨   s    €€r   Úrun_itz?TestLeaks.test_untracked_memory_doesnt_increase.<locals>.run_itQ  s(   ø€ Ü˜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Ù�Hð ð ×)Ñ)Ó+ˆ
ä˜4×0Ñ0Ö1ˆEÜ˜Z¨×)=Ñ)=Ó)?Ó@ˆJÙŒHà×,Ñ,Ó.ˆIØ˜JÓ&¨5°1«9Ùð 2ð 	×Ñ˜Y¨
Õ3r   c                 óv  ‡‡	‡
‡‡‡— | j                  «        | j                  «        dgŠ	ˆ	fd„ŠdŠ
ˆ
ˆfd„Š| Š G ˆˆˆfd„d«      }d x}}t        | j                  «      D �]  }d‰	d<    |«       }t	        j
                  |¬«      }|j                  «        |j                  d«       | j                  |j                  «       «       |€|j                  }t        ||j                  «      }‰r>| j                  |j                  d	«       | j                  ‰	d   ‰
|j                  z  «       ~~‰s| j                  ‰	d   d«       ‰r| j                  «        | j                  «       }||k  s�Œ|d
kD  s�Œ n | j                  «        | j                  «       }t         rdnd}| j#                  |||z   dfz  «       y )Nr   c                  óª   •— 	 t        j                  «       j                  j                  «        y# t         j                  $ r ‰ dxx   dz  cc<   ‚ w xY w)Nr   r   )r4   r5   r6   r7   ÚGreenletExit)Ú
EXIT_COUNTs   €r   r¨   z3TestLeaks._check_untracked_memory_thread.<locals>.ft  sP   ø€ ðÜ×#Ñ#Ó%×,Ñ,×3Ñ3Ô5ð øô ×(Ñ(ò Ø˜1“ Ñ"“Øðús	   ƒ,0 °"Ar©   c                  ó˜   •— g } t        ‰«      D ]8  }t        j                  ‰«      }| j                  |«       |j                  «        Œ: | S r   )r<   r4   rY   r7   )Úgletsr@   r?   r«   r¨   s      €€r   r¬   z8TestLeaks._check_untracked_memory_thread.<locals>.run_it}  sC   ø€ ØˆEÜ˜4–[�ô ×%Ñ% aÓ(�Ø—‘˜Q”Ø—‘•
ð !ð ˆLr   c                   ó,   •— e Zd ZdxZZdZdZˆ ˆˆfd„Zy)ú<TestLeaks._check_untracked_memory_thread.<locals>.ThreadFuncr   r(   rC   c                 ó>  •— ‰j                  «       | _        t        | j                  «      D ]%  }| xj                  t         ‰«       «      z  c_        Œ' | j                  D ]  }‰j                  dt        |«      «       Œ ‰rd| _        ‰j                  «       | _        y )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__�  sy   ø€ Ø"&×"6Ñ"6Ó"8�”ä˜tŸy™yÖ)�AØ—J’J¤%©«£/Ñ1–Jð *ð Ÿœ�AØ—M‘MÐ"4´c¸!³fÕ=ð $ñ (Ø!#�D”JØ!%×!5Ñ!5Ó!7�•r   N)r#   r$   r%   r°   r²   r¹   r«   rÂ   )rÀ   r¬   rÁ   s   €€€r   Ú
ThreadFuncr»   ‹  s   ø„ Ø%&Ð&ˆJ˜ØˆEØˆD÷8r   rÃ   rN   é   r(   r   i   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²   r±   Úthread_funcrU   Ú	tolerancer·   r«   r¨   r¬   rÁ   s    `       @@@@@r   Ú_check_untracked_memory_threadz(TestLeaks._check_untracked_memory_threadh  s�  ý€ Ø×%Ñ%Ô'ð 	×ÑÔà�Sˆ
ô	ð ˆõ
	ð ˆ÷	8õ 	8ð$ "&Ð%ˆ
�YÜ˜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à˜JÔ&¨5°1¬9Ùð5 2ð8 	×&Ñ&Ô(Ø×(Ñ(Ó*ˆ	õ #&‘J¨1ˆ	Ø×Ñ˜Y¨
°YÑ(>Ø0°E°8Ñ;õ	=r   c                 ó(   — | j                  d¬«       y )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   € ð 	×+Ñ+ÀÐ+ÕFr   c                 ón   — t         rt        rt        r| j                  d«       | j	                  d¬«       y )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Ì  s*   € õ Õ.µ5Ø�M‰MÐRÔSØ×+Ñ+ÀÐ+Õ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ò
Ið ñó ðò#ò$#ò.Að 59Ø5:ó|$ò|ò=ð ,ñ@ó ,ð@ð( ,ñ=ó ,ð=ð ,ñ/ó ,ð/ð
 Ðò	?ð ñ4ó ð4ó>\=ð| ñGó ðGð ñ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ðT ˆzÒÙˆzÓ×ÑÕ!ð r   