o ?Og #@sddlZddlZddlZddlZddlZddlmZddlmZgdZe edZ ej ej fZ ddd iZejd krWddlZddlZe ed rOed ejied ejiGdddeZeZejZejZejZejZddZdS)N)spawn)util)ensure_runningregister unregisterpthread_sigmaskZnoopcCsdSNr r r G/opt/alt/python310/lib64/python3.10/multiprocessing/resource_tracker.py!sr posix sem_unlinkZ semaphoreZ shared_memoryc@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)ResourceTrackercCst|_d|_d|_dSr ) threadingZLock_lock_fd_pidselfr r r __init__8s  zResourceTracker.__init__cCsn|j*|jdur WddSt|jd|_t|jdd|_WddS1s0wYdS)Nr)rrosclosewaitpidrrr r r _stop=s  "zResourceTracker._stopcCs||jSr )rrrr r r getfdJszResourceTracker.getfdc Cs|j|jdur?|r WddSt|jz|jdur)t|jdWn ty3Ynwd|_d|_t dg}z | t j Wn tyTYnwd}t\}}zXzA| |t}|gt}|d||g7}ztrttjtt|||}Wtrttjtn trttjtwwWn t|||_||_Wt|nt|wWddS1swYdS)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 rNs^         "zResourceTracker.ensure_runningcCs*z t|jdWdStyYdSw)z;Check that the pipe has not been closed by sending a probe.s PROBE:0:noop FT)rwriterOSErrorrr r r rs  zResourceTracker._check_alivecC|d||dS)z0Register name of resource with resource tracker.REGISTERN_sendrnamertyper r r rzResourceTracker.registercCr2)z2Unregister name of resource with resource tracker. UNREGISTERNr4r6r r r rr9zResourceTracker.unregistercCsB|d|||d}t|dkrtdt|j|}dS)Nz {0}:{1}:{2} asciiiz msg too long)rformatencodelen ValueErrorrr0r)rr+r7r8msgnbytesr r r r5s  zResourceTracker._sendN) __name__ __module__ __qualname__rrrrrrrr5r r r r r6s @  rc Csttjtjttjtjtrttjttj tj fD]}z| Wqt y0Yqwddt D}zt|dj}|D]_}zF|dd\}}}t |d}|durgtd|d||d krs|||n|d kr|||n |d krntd |WqCt yz tjtWnYYqCwWdn1swYW|D]I\}}|rz td t||fWn t yYnw|D])}z&zt ||Wnt y} ztd|| fWYd} ~ nd} ~ wwWqwqdS|D]N\}}|r&z td t||fWn t y%Ynw|D]+}z(zt ||Wnt yO} ztd|| fWYd} ~ nd} ~ wwWq(wqw)zRun resource tracker.cSsi|]}|tqSr )set).0r8r r r szmain..rbr;:NzCannot register z. for automatic cleanup: unknown resource type r3r: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_FUNCSkeysopenstripdecodesplitgetr?addremove RuntimeError excepthookexc_infoitemsrrr>) fdfcacheliner+r7r8Z cleanup_funcZ rtype_cacheer r r mains          ra)rr'r!rrrr__all__hasattrr&rJrLr)rOr7Z_multiprocessingZ _posixshmemupdaterZ shm_unlinkobjectrZ_resource_trackerrrrrrar r r r s:      w