a DOg!@sddlZddlZddlZddlZddlZddlmZddlmZgdZe edZ ej ej fZ ddd iZejd krddlZddlZeejejd Gd d d eZeZejZejZejZejZddZdS)N)spawn)util)ensure_runningregister unregisterpthread_sigmaskZnoopcCsdSNr r r E/opt/alt/python39/lib64/python3.9/multiprocessing/resource_tracker.py!r posix)Z semaphoreZ shared_memoryc@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)ResourceTrackercCst|_d|_d|_dSr ) threadingZLock_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_executablerZ_args_from_interpreter_flags _HAVE_SIGMASKsignalr SIG_BLOCK_IGNORED_SIGNALSZspawnv_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. UNREGISTERNr3r5r r r rszResourceTracker.unregistercCsb|d|||d}t|dkr0tdt|j|}|t|ks^Jd|t|dS)Nz {0}:{1}:{2} asciiiz name too longznbytes {0:n} but len(msg) {1:n})rformatencodelen ValueErrorrr0r)rr+r6r7msgnbytesr r r r4s zResourceTracker._sendN) __name__ __module__ __qualname__rrrrrrrr4r 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).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'SIGINTSIG_IGNSIGTERMr&rr*r)r!stdinstdoutrr$_CLEANUP_FUNCSkeysopenstripdecodesplitgetr=addremove RuntimeError excepthookexc_infoitemsrrr<) fdfcacheliner+r6r7Z cleanup_funcZ rtype_cacheer r r mains      0 * *r_)rr'r!rrrr__all__hasattrr&rHrJr)rMr6Z_multiprocessingZ _posixshmemupdateZ sem_unlinkZ shm_unlinkobjectrZ_resource_trackerrrrrr_r r r r s2     w