a  ze!@sddlZddlZddlZddlZddlZddlmZddlmZgdZe edZ ej ej fZ ddd iZejd krddlZddlZeejejd Gd d d eZeZejZejZejZejZddZdS)N)spawn)util)ensure_runningregister unregisterpthread_sigmaskZnoopcCsdSNr r r T/opt/bitninja-python-dojo/embedded/lib/python3.9/multiprocessing/resource_tracker.py!r posix) semaphoreZ shared_memoryc@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)ResourceTrackercCst|_d|_d|_dSr ) threadingLock_lock_fd_pidselfr r r __init__0s zResourceTracker.__init__cCsj|jP|jdur"WddSt|jd|_t|jdd|_Wdn1s\0YdS)Nr)rrosclosewaitpidrrr r r _stop5s  zResourceTracker._stopcCs||jSr )rrrr r r getfdBszResourceTracker.getfdc Cs|j|jdur~|r,WddSt|jz|jdurRt|jdWntyfYn0d|_d|_t dg}z| t j WntyYn0d}t\}}zz| |t}|gt}|d||g7}z:trttjtt|||}Wtr@ttjtntr>ttjt0Wnt|Yn0||_||_Wt|n t|0Wdn1s0YdS)zMake 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_aliverrrrChildProcessErrorwarningswarnappendsysstderrfileno ExceptionpiperZget_executabler_args_from_interpreter_flags _HAVE_SIGMASKsignalr SIG_BLOCK_IGNORED_SIGNALSspawnv_passfds SIG_UNBLOCK)rZ fds_to_passcmdrwZexeargspidr r r rFsN          zResourceTracker.ensure_runningcCs0zt|jdWnty&YdS0dSdS)z;Check that the pipe has not been closed by sending a probe.s PROBE:0:noop FTN)rwriterOSErrorrr r r rs  zResourceTracker._check_alivecCs|d||dS)z0Register name of resource with resource tracker.REGISTERN_sendrnamertyper r r rszResourceTracker.registercCs|d||dS)z2Unregister name of resource with resource tracker. UNREGISTERNr7r9r r r rszResourceTracker.unregistercCsB|d|||d}t|dkr0tdt|j|}dS)Nz {0}:{1}:{2} asciiiz name too long)rformatencodelen ValueErrorrr4r)rr/r:r;msgnbytesr r r r8s  zResourceTracker._sendN) __name__ __module__ __qualname__rrrrrrrr8r r r r r.s @ rc Csttjtjttjtjtr2ttjttj tj fD]$}z | Wq>t y`Yq>0q>ddt D}zt|d}|D]}z|dd\}}}t |d}|durtd|d||d kr|||n2|d kr|||n|d krn td |Wqt yRztjtWn Yn0Yq0qWdn1sl0YW|D]\}}|rztd t||fWnt yYn0|D]X}zNzt ||Wn8t y} ztd|| fWYd} ~ n d} ~ 00Wn0qqn|D]\}}|rhztd t||fWnt yfYn0|D]X}zNzt ||Wn8t y} ztd|| fWYd} ~ n d} ~ 00Wn0qlq*0dS)zRun resource tracker.cSsi|] }|tqSr )set).0r;r r r r zmain..rbr=:NzCannot register z. for automatic cleanup: unknown resource type r6r<ZPROBEzunrecognized command %rzQresource_tracker: There appear to be %d leaked %s objects to clean up at shutdownzresource_tracker: %r: %s)r*SIGINTSIG_IGNSIGTERMr)rr.r,r#stdinstdoutrr&_CLEANUP_FUNCSkeysopenstripdecodesplitgetrAaddremove RuntimeError excepthookexc_infoitemsr r!r@) fdfcacheliner/r:r;Z cleanup_funcZ rtype_cacheer r r mains      0 * *rc)rr*r#rr rr__all__hasattrr)rLrNr,rQr:_multiprocessingZ _posixshmemupdate sem_unlinkZ shm_unlinkobjectr_resource_trackerrrrrrcr r r r s2     w