o =?h@sddlZddlZddlZddlZddlmZddlmZddlm Z ddl m Z zddl m Z WneyAddlZddZ Ynwd d Zd d Zd dZdS)N) isabstract)support) os_helper) clear_caches) _get_dumpcCs&tdd|jD}||j|j|jfS)Ncss|]}t|VqdSN)weakrefref).0objr ?/opt/alt/python310/lib64/python3.10/test/libregrtest/refleak.py sz_get_dump..)set _abc_registry _abc_cache_abc_negative_cache_abc_negative_cache_version)clsZregistry_weakrefsr r r rsrc' sddl}ddlttdstdttjdd}|j }tj }zddl }Wn t y6d}Ynw|j }i} fddjjDD]} t| sPqI| | gD] } t| d| | <qWqIddtd d Dfd d } |j\} }}tjtj|}| |}tt|}dg|}dg|}dg|}tj}tj}tj}d}}}|jstd |dtj dtd|ddd|tj ddt!||||| |D]@}|t!||||| |}|}|}|jstddtj dd| ||||<| ||||<| ||||<|}|}|}q|jsttj ddd}dd} d}!|d|f|d|f|d| ffD]E\}"}#}$|"| d}"|$|"rxd ||"|#t"|"f}%t|%tj ddt#|d!}&t|%|&d|&$Wdn 1sqwYd}!q4|!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 Pythoncg|]}tj|qSr getattrabcr a collectionsr r 4zdash_R..cSsi|]}||qSr r )r valuer r r >szdash_R..iics ||Sr) setdefault)r )int_poolr r get_pooled_int?s zdash_R..get_pooled_intZ beginningZ repetitions)fileZ 1234567890 T)r%flush.)endr%r(cSstdd|DS)Ncss|]}|dkVqdS)r'Nr )r Zdeltar r r rsz2dash_R..check_rc_deltas..)alldeltasr r r check_rc_deltasrs zdash_R..check_rc_deltascSst|Sr)anyr-r r r check_fd_deltasszdash_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_funcr2fspspicr=zdcabcsrr r$ZnwarmupZntrackedZfnameZrepcountZ rep_rangeZ rc_deltasZ alloc_deltasZ fd_deltasrGrrHZ rc_beforeZ alloc_beforeZ fd_beforeiZ alloc_afterZrc_afterZfd_afterr/r1Zfailedr.Z item_nameZcheckermsgZrefrepr )rr#r dash_Rs                    rWc sddl}ddl|tjdd<|j|j|tjtj|zddl }Wn t y4Yn w|j |j |t fddj jD}tt|}|D]%}||gD]} || tD] } | duru| | qh| q_qVtdS)Nrcrr rrrr r rrz"dash_R_cleanup..)r2r3r8r9r:clearupdater5r<r=r>r?_clear_type_cacherr@filterrrAgetrregister_abc_caches_clearr) rPrQrRrSrTr2r=Z abs_classesrr r r rr rLs4             rLcCsNttd}tdD] }|||dq ddtdDttdddS)Nr'cSsg|]}t|qSr )chr)r rUr r r rszwarm_caches..i)bytesrBrF)srUr r r r7s  r7)rCrer5r8inspectrtestrZ test.supportrZtest.libregrtest.utilsr_abcrr>rrWrLr7r r r r s$        "