U \k^ @sddlZddlZddlZddlZddlmZddlmZzddlm Z Wn$e k rlddl Z ddZ YnXddZ d d Z d d Zd dZdS)N) isabstract)support) _get_dumpcCs&tdd|jD}||j|j|jfS)Ncss|]}t|VqdSN)weakrefref).0objr ./usr/lib/python3.8/test/libregrtest/refleak.py sz_get_dump..)set _abc_registry _abc_cache_abc_negative_cache_abc_negative_cache_version)clsZregistry_weakrefsr r r r s rc' sddl}ddlttds"tdttjdd}|j }tj }z ddl }Wnt k rnd}Yn X|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]t\}"}#}$|"| d}"|$|"rpd ||"|#t"|"f}%t|%tj ddt#|d!}&t|%|&d|&$W5QRXd}!qp|!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 1szdash_R..cSsi|] }||qSr r )rvaluer r r ;szdash_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 |sz2dash_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.fspspicr9zdcabcsrr r ZnwarmupZntrackedZfnameZrepcountZ rep_rangeZ rc_deltasZ alloc_deltasZ fd_deltasrCrrDZ rc_beforeZ alloc_beforeZ fd_beforeiZ alloc_afterZrc_afterZfd_afterr+r-Zfailedr*Z item_nameZcheckermsgZrefrepr )rrr dash_Rs                  rSc sddl}ddl|tjdd<|j|j|tjtj|z ddl }Wnt k rjYnX|j |j |t fddj jD}tt|}|D]J}||gD]6} || tD]} | dk r| | q| qqtdS)Nrcsg|]}tj|qSr rrrr r rsz"dash_R_cleanup..)r.r/r4r5r6clearupdater1r8r9r:r;_clear_type_cacherr<filterrr=getr register_abc_caches_clear clear_caches) rLrMrNrOrPr.r9Z abs_classesrr rr rr rHs.          rHcCs^tjD]}t|dr |`q tjtjtjtjfD]}|dk r2| q2ztjd}Wnt k rjYn X|j t ztjd}Wnt k rYn X|j ztjd}Wnt k rYn X|ztjd}Wnt k rYn X|ztjd}Wnt k r(Yn X|ztjd}Wnt k rVYn X|ztjd}Wnt k rYn X|j ztjd } Wnt k rYn X| ztjd } Wnt k rYnXd| _ztjd } Wnt k rYn X| ztjd } Wnt k r<YnX| jD] } | qDtdS) N__warningregistry__zdistutils.dir_util _strptimez urllib.parsezurllib.request linecache mimetypesfilecmpstructdoctestctypestyping)r1modulesvaluesr0r\stdoutrG __stdout__ __stderr__r$KeyErrorZ _path_createdrTrepurgeZ _regex_cacheZ clear_cacheZ urlcleanup clearcacheZ_default_mime_types_cacheZ _clearcacheZmasterZ _reset_cacheZ _cleanupsrZ gc_collect)modstreamZdistutils_dir_utilr]Z urllib_parseZurllib_requestr^r_r`rarbrcrdfr r r r[s       r[cCsNttd}tdD]}|||dqddtdDttdddS)Nr#cSsg|] }t|qSr )chr)rrQr r r rszwarm_caches..i)bytesr>rB)srQr r r r3s   r3)r?rkr1r4inspectrZtestr_abcrr:rrSrHr[r3r r r r s  "`