a XC?h @sddlZddlZddlZddlZddlmZddlmZzddlm Z Wn"e yjddl Z ddZ Yn0ddZ d d Z d d Zd dZdS)N) isabstract)support) _get_dumpcCs&tdd|jD}||j|j|jfS)Ncss|]}t|VqdSN)weakrefref).0objr =/opt/alt/python39/lib64/python3.9/test/libregrtest/refleak.py z_get_dump..)set _abc_registry _abc_cache_abc_negative_cache_abc_negative_cache_version)clsZregistry_weakrefsr r r r src' sddl}ddlttds"tdttjdd}|j }tj }z ddl }Wnt yld}Yn 0|j }i} fddjjDD]2} t| sq| | gD]} t| d| | <qqddtd d Dfd d } |j\} }}tjtj|}| |}tt|}dg|}dg|}dg|}tj}tj}tj}d}}}|jstd |dtj dtd|ddd|tj ddt!||||| |D]}|t!||||| |}|}|}|jstddtj dd| ||||<| ||||<| ||||<|}|}|}q|js>ttj ddd}dd} d}!|d|f|d|f|d| ffD]\}"}#}$|"| d}"|$|"rnd ||"|#t"|"f}%t|%tj ddt#|d!$}&t|%|&d|&$Wdn1s0Yd}!qn|!S)"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 Pythoncsg|]}tj|qSr getattrabcra collectionsr r 1r zdash_R..cSsi|] }||qSr r )rvaluer r r ;r zdash_R..iics ||Sr) setdefault)r)int_poolr r get_pooled_int<szdash_R..get_pooled_intZ beginningZ repetitions)fileZ 1234567890 T)r"flush.)endr"r%cSstdd|DS)Ncss|]}|dkVqdS)r$Nr )rZdeltar r r r |r z2dash_R..check_rc_deltas..)alldeltasr r r check_rc_deltasos zdash_R..check_rc_deltascSst|Sr)anyr*r r r check_fd_deltas~szdash_R..check_fd_deltasFZ referencesz memory blockszfile descriptorsz%s leaked %s %s, sum=%sr)%copyregcollections.abchasattrsys Exception warm_cacheswarningsfiltersdispatch_tablecopypath_importer_cache zipimport ImportError_zip_directory_cacher__all__r__subclasses__rrangeZ huntrleaksospathjoinrZSAVEDCWDlistgetallocatedblocksrfd_countquietprintstderrdash_R_cleanupsumopenr%)'nsZ test_nameZ test_funcr/fspspicr:zdcabcsrr r!ZnwarmupZntrackedZfnameZrepcountZ rep_rangeZ rc_deltasZ alloc_deltasZ fd_deltasrDrrEZ rc_beforeZ alloc_beforeZ fd_beforeiZ alloc_afterZrc_afterZfd_afterr,r.Zfailedr+Z item_nameZcheckermsgZrefrepr )rr r dash_Rs                    (rTc sddl}ddl|tjdd<|j|j|tjtj|z ddl }Wnt yhYn0|j |j |t fddj jD}tt|}|D]J}||gD]6} || tD]} | dur| | q| qqtdS)Nrcsg|]}tj|qSr rrrr r rr z"dash_R_cleanup..)r/r0r5r6r7clearupdater2r9r:r;r<_clear_type_cacherr=filterrr>getrregister_abc_caches_clear clear_caches) rMrNrOrPrQr/r:Z abs_classesrr rr rr rIs.           rIcCsHtjD]}t|dr |`q tjtjtjtjfD]}|dur2| q2ztjd}Wnt yhYn 0|j t ztjd}Wnt yYn 0|j ztjd}Wnt yYn 0|ztjd}Wnt yYn 0|ztjd}Wnt yYn 0|ztjd}Wnt yJYn 0|ztjd}Wnt yvYn 0|j ztjd } Wnt yYn 0| ztjd } Wnt yYn0d| _ztjd } Wnt yYn 0| ztjd } Wnt y&Yn0| jD] } | q.tdS) N__warningregistry__zdistutils.dir_util _strptimez urllib.parsezurllib.request linecache mimetypesfilecmpstructdoctestctypestyping)r2modulesvaluesr1r]stdoutrH __stdout__ __stderr__r%KeyErrorZ _path_createdrUrepurgeZ _regex_cacheZ clear_cacheZ urlcleanup clearcacheZ_default_mime_types_cacheZ _clearcacheZmasterZ _reset_cache _cleanupsrZ gc_collect)modstreamZdistutils_dir_utilr^Z urllib_parseZurllib_requestr_r`rarbrcrdrefr r r r\s           r\cCsNttd}tdD]}|||dqddtdDttdddS)Nr$cSsg|] }t|qSr )chr)rrRr r r rr zwarm_caches..i)bytesr?rC)srRr r r r4s   r4)r@rlr2r5inspectrtestr_abcrr;rrTrIr\r4r r r r s   "`