B sy&@sddlZddlZddlZddlZddlmZddlmZyddlm 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|VqdS)N)weakrefref).0objr =/opt/alt/python37/lib64/python3.7/test/libregrtest/refleak.py sz_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 }y ddl }Wnt k rnd}Yn X|j }i} xPfddjjDD]6} t| sqx&| | gD]} t| d| | <qWqWddtd d Dfd d } |j\} }}tjtj|}| |}tt|}dg|}dg|}dg|}tj}tj}tj}d}}}|jstd |dtj dtd|ddd|tj ddt!||||| x|D]}|t!||||| |}|}|}|jstddtj dd| ||||<| ||||<| ||||<|}|}|}qW|jsLttj ddd}dd} d}!x|d|f|d|f|d| fgD]t\}"}#}$|"| d}"|$|"r~d ||"|#t"|"f}%t|%tj ddt#|d!}&t|%|&d|&$WdQRXd}!q~W|!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 )getattrabc)ra) collectionsr r 1szdash_R..cSsi|] }||qSr r )rvaluer r r ;szdash_R..iics ||S)N) setdefault)r)int_poolr r get_pooled_int<szdash_R..get_pooled_intZ beginningZ repetitions)fileZ 1234567890 T)rflush.)endrr cSstdd|DS)Ncss|]}|dkVqdS)rNr )rZdeltar r r r |sz2dash_R..check_rc_deltas..)all)deltasr r r check_rc_deltasos zdash_R..check_rc_deltascSst|S)N)any)r%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)fspspicr4zdcabcsrrrZnwarmupZntrackedZfnameZrepcountZ rep_rangeZ rc_deltasZ alloc_deltasZ fd_deltasr>rr?Z rc_beforeZ alloc_beforeZ fd_beforeiZ alloc_afterZrc_afterZfd_afterr&r(Zfailedr%Z item_nameZcheckermsgZrefrepr )rrr dash_Rs                     rNc sddl}ddl|tjdd<|j|j|tjtj|y ddl }Wnt k rjYnX|j |j |t fddj jD}tt|}xZ|D]R}xL||gD]:} x,|| tD]} | dk r| | qW| qWqWtdS)Nrcsg|]}tj|qSr )rr)rr)rr r rsz"dash_R_cleanup..)r)r*r/r0r1clearupdater,r3r4r5r6_clear_type_cacherr7filterrr8getr register_abc_caches_clear clear_caches) rGrHrIrJrKr)r4Z abs_classesrrrr )rr rCs.          rCcCslx tjD]}t|dr |`q Wx,tjtjtjtjfD]}|dk r8| q8Wytjd}Wnt k rrYn X|j t ytjd}Wnt k rYn X|j ytjd}Wnt k rYn X|ytjd}Wnt k rYn X|ytjd}Wnt k r2Yn X|ytjd}Wnt k r`Yn X|ytjd}Wnt k rYn X|j ytjd } Wnt k rYn X| ytjd } Wnt k rYnXd| _ytjd } Wnt k rYn X| ytjd } Wnt k rFYnXx| jD] } | qPWtdS) N__warningregistry__zdistutils.dir_util _strptimez urllib.parsezurllib.request linecache mimetypesfilecmpstructdoctestctypestyping)r,modulesvaluesr+rWstdoutrB __stdout__ __stderr__r KeyErrorZ _path_createdrOrepurgeZ _regex_cacheZ clear_cacheZ urlcleanup clearcacheZ_default_mime_types_cacheZ _clearcacheZmasterZ _reset_cacheZ _cleanupsrZ gc_collect)modstreamZdistutils_dir_utilrXZ urllib_parseZurllib_requestrYrZr[r\r]r^r_fr r r rVs       rVcCsRttd}x tdD]}|||dqWddtdDttdddS)NrcSsg|] }t|qSr )chr)rrLr r r rszwarm_caches..i)bytesr9r=)srLr r r r.s  r.)r:rfr,r/inspectrZtestr_abcrr5rrNrCrVr.r r r r s  "`