L iFdZddlmZmZmZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddl m Z ddl mZddlmZdd lmZdd lmZe j&sJGd d eZd ZGdde Zedk(redj5yy)z) Testing scenarios that may have leaked. )print_functionabsolute_importdivisionN)TestCase)PY314)RUNNING_ON_FREETHREAD_BUILD)fails_leakcheck)ignores_leakcheck)RUNNING_ON_MANYLINUXc<eZdZeZdZdZdZedZ y)HasFinalizerTracksInstancesctj||_|jj t |yN)sysinternmsgEXTANT_INSTANCESaddid)selfrs _/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/greenlet/tests/test_leaks.py__init__z$HasFinalizerTracksInstances.__init__s)::c? !!"T(+cL|jjt|yr)rremoverrs r__del__z#HasFinalizerTracksInstances.__del__!s $$RX.rc6dt||jfzS)Nz()rrrs r__repr__z$HasFinalizerTracksInstances.__repr__#s!9 tHdhh=   rc8|jjyr)rclear)clss rresetz!HasFinalizerTracksInstances.reset's ""$rN) __name__ __module__ __qualname__setrrrr classmethodr$rrrrs-u,/ %%rrc(tr|St|Sr)r r )funcs r&fails_leakcheck_except_on_free_thradedr-,s" 4  rceZdZdZdZedZdZdZdZ ddZ dZ d Z e d Ze d Ze d Zd ZdZedZddZedZedZy) TestLeakscd}tj|}tjd}tdD]}|j||j tj||y)N)abccXtjjj|Srgreenlet getcurrentparentswitch)argss rz)TestLeaks.test_arg_refs..;s#=(--/66==tDrd)r getrefcountr6ranger9 assertEqual)rr:refcount_beforeg_s r test_arg_refszTestLeaks.test_arg_refs6sb//$/    D Fs A AHHdO  .@rc6i}|jtj|tsdndt jd}t dD]}|j di||jtj|tsdydy)Nrc^tjjjdi|S)Nr*r5)gkwargss rr;z+TestLeaks.test_kwarg_refs..Es&Ah113::AALGLrr<r*)r?rr=rr6r>r9)rkwargsrArBs rtest_kwarg_refszTestLeaks.test_kwarg_refs@s~ 05!aH    L Ns A AHH v   05!HaHrcd}tj|}|jtjd|j dy)Nc.tjdy)NMbP?)timesleepr*rrworkerz+TestLeaks.__recycle_threads..workerUs JJu rtargetrL ) threadingThreadstartrMrNjoin)rOts r__recycle_threadszTestLeaks.__recycle_threadsMs7    F +   5 r rcgfd}tdD]:}tj|}|j|j d~<t j |jt j tjt j D]}|j|y)Ncrjtjtjyr)appendweakrefrefr6r7)ggsrrOz,TestLeaks.test_threaded_leak..worker^s! IIgkk("5"5"78 9rrErPrR r>rSrTrUrVr6r7_TestLeaks__recycle_threadsgccollect assertIsNonerrOrBrWrAr^s @rtest_threaded_leakzTestLeaks.test_threaded_leak\s  :q A  /A GGI FF2J       #A   ac " #rcgfd}tdD]:}tj|}|j|j d~<t j |jt j tjt j D]}|j|y)Ncgxtj_fd}tdD]%}tj|j 'j t jtjy)NcLjtjyr)r[r6r7)llsr additionalzDTestLeaks.test_threaded_adv_leak..worker..additionalss (--/0rrE)r6r7rir>r9r[r\r])rjrBrir^s @rrOz0TestLeaks.test_threaded_adv_leak..workerpsf,. .B$$&) 11X 7!!*-446 7 IIgkk("5"5"78 9rrErPrRr_rds @rtest_threaded_adv_leakz TestLeaks.test_threaded_adv_leakns  :q A  /A GGI FF2J       #A   ac " #rcVtjj}|j|dtjj dtjj}|j |||j tjjdy)NrTr)r6 _greenlet&get_clocks_used_doing_optional_cleanupassertGreaterEqualenable_optional_cleanupr? assertGreaterCLOCKS_PER_SEC)rusedused2s rassertClocksUsedzTestLeaks.assertClocksUsedsz!!HHJ a(2248""IIK u% 8--<.background_greenletsv,-DEB    / / +,CD F ,'')00772$##%,,33RD9rc@tj}jtj|jj||j ~j jdrtjyy)NrR) r6r[r\r]r8r9r(waitr7)gletbackground_glet_killedbackground_glet_runningr~background_greenlets bg_main_wrefsmanually_collect_backgrounds rbackground_threadz4TestLeaks._check_issue251..background_threadsy$$%89D  T[[!9 : ' ' - KKM # ' ' ) " ' ' + +##%+rrPrRTrr)ra is_trackedrr$r6r7 count_objectsrSEventrTrUrlistlen assertFalsedeadr(rVwait_for_pending_cleanupsassertLessEqualrmrnr?rru)rrr}greenlets_beforerrW lists_before lists_aftergreenlets_afterrrr~rrs `` @@@@@r_check_issue251zTestLeaks._check_issue251s}}R   #))+--h.?.?E-R"+//"3!*!2! :  & &$   $5 6  $$R())$4)@ '(A--- -a0556 ! #""$ r  &&((($(? ,,X->->5,Q [,7,!!HHJV   _.> ?*  !TestLeaks.test_issue251_issue252_need_to_collect_in_backgrounds& ?rcd|_tjjd |j dtjjdy#tjjdwxYw)NTFr)expect_greenlet_leakr6rmrprrs rEtest_issue251_issue252_need_to_collect_in_background_cleanup_disabledzOTestLeaks.test_issue251_issue252_need_to_collect_in_background_cleanup_disabled+s]$(!2259 =  U C    6 6t  rc`|jddfd}tdD] }| |j}t|jD]@}t ||j}||j}||ks:|dkDs@n|j |y)Ncy)Nrr*r*rrfz:TestLeaks.test_untracked_memory_doesnt_increase..fPsr'cltD]%}tjj'yr)r>r6r9)rBITERrs rrun_itz?TestLeaks.test_untracked_memory_doesnt_increase..run_itTs-4[ .!!!$++- .rrr)rr>get_process_ussUNTRACK_ATTEMPTSmaxr)rrrB uss_beforecount uss_afterrrs @@r%test_untracked_memory_doesnt_increasez/TestLeaks.test_untracked_memory_doesnt_increaseIs %%'  . q A H  ))+ 4001 EZ)=)=)?@J H,,.IJ&519   Y 3rc< |jdgfd d fd | G fdd}dx}}t|jD]}dd<|}tj|}|j |j d|j|j| |j}t||j}r>|j|jd |jd |jz~~s|jddr|j|j}||ks |d kDsn|j|j}|j!||d fzy) Nrc tjjjy#tj$rdxxdz cc<wxYw)Nrr)r6r7r8r9 GreenletExit) EXIT_COUNTsrrz3TestLeaks._check_untracked_memory_thread..frsP ##%,,335(( 1 "  s ,0"Arcg}tD]8}tj}|j||j:|Sr)r>r6r[r9)gletsrBrArrs rrz8TestLeaks._check_untracked_memory_thread..run_it{sHE4[ %%a( Q  Lrc,eZdZdxZZdZdZfdZy).ThreadFuncrr*rEc>j|_t|jD]%}|xjt z c_'|jD]}j dt|rd|_j|_y)Nzsuspended activer*) rrr>rrtupleassertInstrr)rrBrAdeallocate_in_threadrtests r__call__zETestLeaks._check_untracked_memory_thread..ThreadFunc.__call__s"&"6"6"8tyy)2AJJ%/1J2>AMM"4c!f=>(!#DJ!%!5!5!7rN)r%r&r'rrrrr)rrrsr ThreadFuncrs%& &JED 8rrrPr*rzafter attempts %d)rr>rrSrTrUrVris_aliverrr?rrrrr) rrrrrr thread_funcrWrrrrrs ` @@@@@r_check_untracked_memory_threadz(TestLeaks._check_untracked_memory_threadks %%'S    8 8$"&% Y4001 EJqM$,K  4A GGI FF2J   QZZ\ *!(33 Z)?)?@J#  !2!2B7  A{7G7G0GH'  A2#..0,,.IJ&5195 8 &&(((*  Y 4G5(4RSrc(|jdy)NTrrrs rItest_untracked_memory_doesnt_increase_unfinished_thread_dealloc_in_threadzSTestLeaks.test_untracked_memory_doesnt_increase_unfinished_thread_dealloc_in_threads +++Frc(|jdy)NFrrrs rGtest_untracked_memory_doesnt_increase_unfinished_thread_dealloc_in_mainzQTestLeaks.test_untracked_memory_doesnt_increase_unfinished_thread_dealloc_in_mains +++GrN)TF)T)r%r&r'rCrI staticmethodr`rerkrurrrr-rrrrrr rrrrr*rrr/r/4sA I  #$#.A595:|$|=,@,@(,=,=,/,/  ?44>OTbGGHHrr/__main__unittest)__doc__ __future__rrrrrarMr\rSr6rrr leakcheckr r r GREENLET_USE_GCobjectrr-r/r% __import__mainr*rrrsA@ )&(+  %& % !RHRHh  zz!r