a ÕDOg¥!ã@sÒddlZddlZddlZddlZddlZddlmZddlmZgd¢Ze edƒZ ej ej fZ ddd „iZejd kr˜ddlZddlZe ejejd œ¡Gd d „d eƒZeƒZejZejZejZejZdd„ZdS)éNé)Úspawn)Úutil)Úensure_runningÚregisterÚ unregisterÚpthread_sigmaskZnoopcCsdS©N©r r r úE/opt/alt/python39/lib64/python3.9/multiprocessing/resource_tracker.pyÚ!ór Úposix)Z semaphoreZ shared_memoryc@sLeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dS)ÚResourceTrackercCst ¡|_d|_d|_dSr )Ú threadingZLockÚ_lockÚ_fdÚ_pid©Úselfr r r Ú__init__0s zResourceTracker.__init__cCsj|jP|jdur"WdƒdSt |j¡d|_t |jd¡d|_Wdƒn1s\0YdS)Nr)rrÚosÚcloseÚwaitpidrrr r r Ú_stop5s  zResourceTracker._stopcCs| ¡|jSr )rrrr r r ÚgetfdBszResourceTracker.getfdc Cs¦|jˆ|jdur~| ¡r,WdƒdSt |j¡z|jdurRt |jd¡WntyfYn0d|_d|_t  d¡g}z|  t j   ¡¡Wnty¨Yn0d}t ¡\}}zºz†|  |¡t ¡}|gt ¡}|d||g7}z:trt tjt¡t |||¡}Wtr@t tjt¡ntr>t tjt¡0Wnt |¡‚Yn0||_||_Wt |¡n t |¡0Wdƒn1s˜0YdS)z¬Make sure that resource tracker process is running. This can be run from any process. Usually a child process will use the resource created by its parent.NrzUresource_tracker: process died unexpectedly, relaunching. Some resources might leak.z:from multiprocessing.resource_tracker import main;main(%d)z-c)rrÚ _check_aliverrrrÚChildProcessErrorÚwarningsÚwarnÚappendÚsysÚstderrÚfilenoÚ ExceptionÚpiperZget_executablerZ_args_from_interpreter_flagsÚ _HAVE_SIGMASKÚsignalrÚ SIG_BLOCKÚ_IGNORED_SIGNALSZspawnv_passfdsÚ SIG_UNBLOCK)rZ fds_to_passÚcmdÚrÚwZexeÚargsÚpidr r r rFsN         ÿ zResourceTracker.ensure_runningcCs0zt |jd¡Wnty&YdS0dSdS)z;Check that the pipe has not been closed by sending a probe.s PROBE:0:noop FTN)rÚwriterÚOSErrorrr r r r†s  zResourceTracker._check_alivecCs| d||¡dS)z0Register name of resource with resource tracker.ÚREGISTERN©Ú_send©rÚnameÚrtyper r r r‘szResourceTracker.registercCs| d||¡dS)z2Unregister name of resource with resource tracker.Ú UNREGISTERNr3r5r r r r•szResourceTracker.unregistercCsB| ¡d |||¡ d¡}t|ƒdkr0tdƒ‚t |j|¡}dS)Nz {0}:{1}:{2} Úasciiiz name too long)rÚformatÚencodeÚlenÚ ValueErrorrr0r)rr+r6r7ÚmsgÚnbytesr r r r4™s  zResourceTracker._sendN) Ú__name__Ú __module__Ú __qualname__rrrrrrrr4r r r r r.s @ rc CsÐt tjtj¡t tjtj¡tr2t tjt¡tj tj fD]$}z |  ¡Wq>t y`Yq>0q>dd„t  ¡Dƒ}z¨t|dƒà}|D]Ê}z| ¡ d¡ d¡\}}}t  |d¡}|durÒtd|›d|›ƒ‚|d krê|| |¡n2|d kr|| |¡n|d krn td |ƒ‚WqŠt yRztjt ¡ŽWn Yn0YqŠ0qŠWdƒn1sl0YW| ¡D]ž\}}|r¾zt d t|ƒ|f¡Wnt y¼Yn0|D]X}zNzt ||ƒWn8t y} zt d|| f¡WYd} ~ n d} ~ 00Wn0qÂq€nª| ¡D]ž\}}|rhzt d t|ƒ|f¡Wnt yfYn0|D]X}zNzt ||ƒWn8t yº} zt d|| f¡WYd} ~ n d} ~ 00Wn0qlq*0dS)zRun resource tracker.cSsi|] }|tƒ“qSr )Úset)Ú.0r7r r r Ú ¹r zmain..Úrbr9ú:NzCannot register z. for automatic cleanup: unknown resource type r2r8ZPROBEzunrecognized command %rzQresource_tracker: There appear to be %d leaked %s objects to clean up at shutdownzresource_tracker: %r: %s)r'ÚSIGINTÚSIG_IGNÚSIGTERMr&rr*r)r!ÚstdinÚstdoutrr$Ú_CLEANUP_FUNCSÚkeysÚopenÚstripÚdecodeÚsplitÚgetr=ÚaddÚremoveÚ RuntimeErrorÚ excepthookÚexc_infoÚitemsrrr<) ÚfdÚfÚcacheÚliner+r6r7Z cleanup_funcZ rtype_cacheÚer r r Úmain«s€    ÿÿ  0 þ *î þ *r_)rr'r!rrÚrrÚ__all__Úhasattrr&rHrJr)rMr6Z_multiprocessingZ _posixshmemÚupdateZ sem_unlinkZ shm_unlinkÚobjectrZ_resource_trackerrrrrr_r r r r Ús2    ÿ þw