!zR:0ddlZddlZddlZddlmZddlmZddlmZddl m Z ddl m Z ddl mZ dd lmZd Zd Zd e defdZdZdZy#e$r ddlZd ZY#wxYw)N) isabstract)Any)support) os_helper) HuntRefleak) clear_caches) _get_dumpctd|jD}||j|j|jfS)Nc3FK|]}tj|ywN)weakrefref).0objs ?/opt/alt/python312/lib64/python3.12/test/libregrtest/refleak.py z_get_dump..sN>'')H)HJ Jctjyddl}t|d5}|j tj|ddddt_y#1swYdt_yxYw)Nrxb)rjunit_xml_listpickleopendump)filenamerfps rsave_support_xmlr$sO% h  G**B/ !G !Gs !AA+c t|d}ddl}|5|j|}dddt j |t _y#t$rYywxYw#1swY9xYw)Nrbr)r FileNotFoundErrorrloadosunlinkrr)r"r#rxml_lists rrestore_support_xmlr,$s] (D ! ;;r? IIh%G  s AA AAA' hunt_refleakquietc 5ddl}ddl}ttds t dt t jdd}|jj}tjj} ddl } | jj} i} |jjD cgc]} t!|j| c} D]8} t#| s| j%| gzD]}t'|d| |<:t)ddDcic]}||c}55fd}|j*}|j,}|j.}||z}t1t)|}dg|z}dg|z}dg|z}tj2}tj4}tj6}t8j:}dx}x}x}} |sUt=d|d tj> d |d zd zzd|}!|!d|dz|!|dz}!t=|!tj>dd}"d}#tA|||| | tCjD|D] }$|}#tG|"tA|||| | tCjD|d}%||%z }&||%dzz }'|}(||'|z ||$<||&|z ||$<||(|z ||$<|sltI||$||$||$})|)dkrd}*n |)d krd|)}*nd}*|$|k(rt=ddtj>dt=|*dtj>d~)~*|&}|'}|(}|%} tK|" |st=tj> d}+d},d}-|d|+f|d|+f|d|,ffD]\}.}/}0|.|d}.|0|.}1tM|.}2|1s|2s$|d |.d|/d!tO|.}3t=|3dtj>"|1rRt=tj>dtQ|d#d$%5}4t=|3|4 |4jSdddd}-t=d&tj>d|-|#fS#t$rd} YwxYwcc} wcc}w#1swYJxYw)'zRun a test multiple times, looking for reference leaks. Returns: False if the test didn't leak references; True if we detected refleaks. rNgettotalrefcountz9Tracking reference leaks requires a debug build of Pythoniic(j||Sr ) setdefault)valueint_pools rget_pooled_intz'runtest_refleak..get_pooled_int^s""5%00r beginningzHrepetitions. Showing number of leaks (. for 0 or less, X for 10 or more))file 1234567890 r:T)r7flushzrefleak-xml.tmp)_only_immortal.) r>123456789X )endr7r;c&td|DS)Nc3&K|] }|dk\ yw)rN)rdeltas rrz;runtest_refleak..check_rc_deltas..s26%5A:6s)alldeltass rcheck_rc_deltasz(runtest_refleak..check_rc_deltass26222rct|Sr )anyrQs rcheck_fd_deltasz(runtest_refleak..check_fd_deltass 6{rF referencesz memory blockszfile descriptorsz leaked z, sum=)rKr7azutf-8)encodingz (this is fine))*copyregcollections.abchasattrsys Exception warm_cacheswarningsfiltersdispatch_tablecopypath_importer_cache zipimport_zip_directory_cache ImportErrorabc__all__getattrr__subclasses__r rangewarmupsrunsr"listgetallocatedblocksr0getunicodeinternedsizerfd_countprintstderrdash_R_cleanupr gc_collectr$maxr,rUsumr r;)6 test_name test_funcr-r.rZ collectionsfspspicrezdcabcsrXrhrr3r5rmrnr"repcount rep_range rc_deltas alloc_deltas fd_deltasrpr0rqrr rc_before alloc_before fd_beforeinterned_immortal_beforenumbers xml_filenameresultiinterned_immortal_after alloc_afterrc_afterfd_after total_leakssymbolrSrVfailedrR item_namecheckerfailing suspiciousmsgrefrepr4s6 @rruntest_refleakr2s 3* +$% % M   ! B    $ $ &B ! ! & & (C4 ,,113 D5@__5L5LM5L +5LM# %%'3%/C!#q)DI0N+0t*<=*<u *<=H1""G   D$$H~HU8_%IhI3>LhI//++ 77!!HFGGIG Gy+C  k8&6::  2!12IX>(7#c)GGH,== gCJJd3$L F2r3T*  &r2sC. #9#!)*-DD #%(?!(CC:%h&:; ! (|)CD Q%h&:; ! ilLOYq\JKar!!#G|cr $? &bszz >"   #: L)Y\  3:: 3F L/2 8 &8'" 7 !&/[ j69c&k;C #2CJJ /3::T2(C':f#F+LLN;'cjjE)'* F Y  N>l;:s*;Q3Q# Q(Q- Q Q -Q6 cpddl}ddl}|tjdd|jj |jj |tjj tjj | ddl }|jj |jj ||jjDcgc]}t|j|} }tt | } | D]q} | j#| gzD]X} |j%| d} | 2| j'| D]} | }| | j)|| j+Zst-tj.y#t$rYwxYwcc}w)Nr)rZr[r`rarbclearupdater]rdrerfrgrhrirjfilterrrkget_abc_registry_clearregister_abc_caches_clearr _clear_type_cache)r|r}r~rrrZr{rerX abs_classesrhrrefsrsubclasss rrurusuHQ   " !!"%!!#""3'3 &&,,.&&--c29D8O8OP8O17;??A.8OKP[1K%%'3%/C88C&D'')C"uH+ X.   ! ! #0N3    QsF$ F3$ F0/F0cttd}tdD] }|||dz tdDcgc] }t|c}ttddycc}w)Nri)bytesrlchrro)srs rr_r_sZ eCjA 3Z !AaC3Z ZSVZ r3!sA%)r)r]r`inspectrtypingrtestr test.supportrruntestsrutilsr _abcr rgrr$r,boolrrur_rNrrrst "! J" &g"-ggT%PkJJJsA AA