Ë
    ¦û’g9D  ã                   óü   — 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 e
j"                  sJ ‚ G d	„ d
e«      Z G d„ de«      Zedk(  r ed«      j/                  «        yy)z)
Testing scenarios that may have leaked.
é    )Úprint_functionÚabsolute_importÚdivisionNé   )ÚTestCase)Ú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     úX/var/www/html/AdoubleTech/venv/lib/python3.12/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                   óÄ   — 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>0   s#   € Ð=œ(×-Ñ-Ó/×6Ñ6×=Ñ=¸tÐD€ r   éd   )r   Úgetrefcountr1   Úranger4   ÚassertEqual)r   r5   Úrefcount_beforeÚgÚ_s        r   Útest_arg_refszTestLeaks.test_arg_refs+   sb   € ØˆÜŸ/™/¨$Ó/ˆä×ÑÙDóFˆä�s“ò 	ˆAØˆA�H‰H�dŠOð	à×ÑœŸ™¨Ó.°Õ@r   c                 óÂ   — i }t        j                   d„ «      }t        d«      D ]  } |j                  di |¤Ž Œ | j                  t	        j
                  |«      d«       y )Nc                  ó^   —  t        j                  «       j                  j                  di | ¤ŽS )Nr(   r0   )Úkwargss    r   r6   z+TestLeaks.test_kwarg_refs.<locals>.<lambda>9   s&   € Ð@œX×0Ñ0Ó2×9Ñ9×@Ñ@ÑJÀ6ÑJ€ r   r7   é   r(   )r1   r9   r4   r:   r   r8   )r   rA   r<   r=   s       r   Útest_kwarg_refszTestLeaks.test_kwarg_refs5   sX   € Øˆä×ÑÙJóLˆä�s“ò 	ˆAØˆA�H‰HÑ�vÓð	à×ÑœŸ™¨Ó0°!Õ4r   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>.workerG   s   € Ü�J‰J�uÕr   ©ÚtargetrF   é
   )Ú	threadingÚThreadÚstartrG   rH   Újoin)rI   Úts     r   Ú__recycle_threadszTestLeaks.__recycle_threads?   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Úrefr1   r2   )Úggs   €r   rI   z,TestLeaks.test_threaded_leak.<locals>.workerP   s!   ø€ à�I‰I”g—k‘k¤(×"5Ñ"5Ó"7Ó8Õ9r   rB   rJ   rL   ©r9   rM   rN   rO   rP   r1   r2   Ú_TestLeaks__recycle_threadsÚgcÚcollectÚassertIsNone©r   rI   r=   rQ   r<   rX   s        @r   Útest_threaded_leakzTestLeaks.test_threaded_leakN   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   )rU   r1   r2   )Úlls   €r   Ú
additionalzDTestLeaks.test_threaded_adv_leak.<locals>.worker.<locals>.additionale   s   ø€ Ø—	‘	œ(×-Ñ-Ó/Õ0r   rB   )r1   r2   rc   r9   r4   rU   rV   rW   )rd   r=   rc   rX   s     @€r   rI   z0TestLeaks.test_threaded_adv_leak.<locals>.workerb   sf   ù€ à,.Ð.ˆB”×$Ñ$Ó&Ô)ô1ä˜1“Xò 7�Ü×!Ñ! *Ó-×4Ñ4Õ6ð7à�I‰I”g—k‘k¤(×"5Ñ"5Ó"7Ó8Õ9r   rB   rJ   rL   rY   r^   s        @r   Útest_threaded_adv_leakz TestLeaks.test_threaded_adv_leak`   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   )r1   Ú	_greenletÚ&get_clocks_used_doing_optional_cleanupÚassertGreaterEqualÚenable_optional_cleanupr:   ÚassertGreaterÚCLOCKS_PER_SEC)r   ÚusedÚused2s      r   ÚassertClocksUsedzTestLeaks.assertClocksUsedw   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   r1   rg   Úset_thread_localr2   r3   r4   )Ú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 )NrL   )	r1   rU   rV   rW   r3   r4   r&   Úwaitr2   )ÚgletÚbackground_glet_killedÚbackground_glet_runningrx   Ú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   rJ   rL   Tr   r   )r[   Ú
is_trackedr   r"   r1   r2   Úcount_objectsrM   ÚEventrN   rO   rz   ÚlistÚlenÚassertFalseÚdeadr&   rP   Úwait_for_pending_cleanupsÚassertLessEqualrg   rh   r:   r   ro   )r   r€   rw   Úgreenlets_beforer�   rQ   Úlists_beforeÚlists_afterÚgreenlets_afterr|   r}   rx   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)r1   rg   rj   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_leakr1   rg   rj   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€   rw   r‘   r   s    r   Ú9test_issue251_issue252_explicit_reference_not_collectablezCTestLeaks.test_issue251_issue252_explicit_reference_not_collectable&  s   € à×ÑØ(-Ø)-ð 	õ 	/r   r7   c                 ó²   — t         j                  d   dk\  sJ ‚t         j                  d d dk  r| j                  d«       t        r| j                  d«       y y )Nr   é   rB   )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.  sT   € ô ×Ñ Ñ" aÒ'Ð'Ð'Ü×Ñ˜B˜QÐ &Ò(Ø�M‰MÐ1Ô2ÝØ�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>.fB  s   € Ør   é'  c                  ól   •— t        ‰«      D ]%  } t        j                  ‰«      j                  «        Œ' y r   )r9   r1   r4   )r=   ÚITERr¥   s    €€r   Úrun_itz?TestLeaks.test_untracked_memory_doesnt_increase.<locals>.run_itF  s-   ø€ Ü˜4“[ò .�Ü×!Ñ! !Ó$×+Ñ+Õ-ñ.r   rž   r   )r¢   r9   Ú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_increase;  s±   ù€ ð 	×%Ñ%Ô'ò	ð ˆõ	.ô
 �q“ò 	ˆAÙ�Hð	ð ×)Ñ)Ó+ˆ
ä˜4×0Ñ0Ó1ò 	ˆEÜ˜Z¨×)=Ñ)=Ó)?Ó@ˆJÙŒHà×,Ñ,Ó.ˆIØ˜JÓ&¨5°1«9Ùð	ð 	×Ñ˜Y¨
Õ3r   c                 ó<  ‡‡‡	‡
‡‡— | 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                  «       }| j!                  ||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   )r1   r2   r3   r4   ÚGreenletExit)Ú
EXIT_COUNTs   €r   r¥   z3TestLeaks._check_untracked_memory_thread.<locals>.fd  sP   ø€ ðÜ×#Ñ#Ó%×,Ñ,×3Ñ3Ô5ð øô ×(Ñ(ò Ø˜1“ Ñ"“Øðús	   ƒ,0 °"Ar¦   c                  ó˜   •— g } t        ‰«      D ]8  }t        j                  ‰«      }| j                  |«       |j                  «        Œ: | S r   )r9   r1   rU   r4   )Úgletsr=   r<   r¨   r¥   s      €€r   r©   z8TestLeaks._check_untracked_memory_thread.<locals>.run_itm  sH   ø€ Øˆ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(   rB   c                 ó>  •— ‰j                  «       | _        t        | j                  «      D ]%  }| xj                  t         ‰«       «      z  c_        Œ' | j                  D ]  }‰j                  dt        |«      «       Œ ‰rd| _        ‰j                  «       | _        y )Nzsuspended activer(   )	rª   r­   r9   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�”ä˜tŸy™yÓ)ò 2�AØ—J’J¤%©«£/Ñ1–Jð2ð Ÿ™ò >�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À   rJ   é   r(   r   zafter attempts %d)r¢   r9   r«   rM   rN   rO   rP   r‡   Úis_aliver­   r¬   r:   r¶   r¨   r‰   rª   rŠ   )r   r½   rÀ   r­   r¯   r®   Úthread_funcrQ   r´   r¨   r¥   r©   r¾   s    `      @@@@@r   Ú_check_untracked_memory_threadz(TestLeaks._check_untracked_memory_thread]  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	ð8 	×&Ñ&Ô(Ø×(Ñ(Ó*ˆ	Ø×Ñ˜Y¨
Ð4GÈ5È(Ñ4RÕSr   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                 ó(   — | j                  d¬«       y )NFrÆ   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   € ð 	×+Ñ+ÀÐ+ÕGr   N)TF)T)r#   r$   r%   r>   rC   ÚstaticmethodrZ   r_   re   ro   r�   r’   r”   r   r—   rš   rœ   r«   r¢   r	   r°   rÄ   rÈ   rÊ   r(   r   r   r*   r*   )   sÝ   „ òAò5ð ñó ðò#ò$#ò.Að 59Ø5:ó|$ò|ò=ð ñ@ó ð@ð( ñ=ó ð=ð ñ/ó ð/ð
 Ðò?ð ñ4ó ð4ó>OTðb ñGó ðGð ñHó ñHr   r*   Ú__main__Úunittest)Ú__doc__Ú
__future__r   r   r   r   r[   rG   rV   rM   r1   Ú r   Ú	leakcheckr   r	   r
   ÚGREENLET_USE_GCÚobjectr   r*   r#   Ú
__import__Úmainr(   r   r   ú<module>rÖ      s�   ðñ÷ AÑ @ã 
Û 	ã Û Û ó Ý Ý &Ý (Ý +ð ×ÒÐ Ðô% &ô %ô OH�ô OHðb ˆzÒÙˆzÓ×ÑÕ!ð r   