
    d#                        d dl Z d dlZd dlZd dlZd dlZddlmZ ddlmZ g dZ e	ed          Z
ej        ej        fZdd iZe j        d	k    rLd dlZd dlZ e	ed
          re                    dej        i           e                    dej        i            G d de          Z e            Zej        Zej        Zej        Zej        Zd ZdS )    N   )spawn)util)ensure_runningregister
unregisterpthread_sigmasknoopc                      d S N r       2lib/python3.11/multiprocessing/resource_tracker.py<lambda>r   !   s    D r   posix
sem_unlink	semaphoreshared_memoryc                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
ResourceTrackerc                 R    t          j                    | _        d | _        d | _        d S r   )	threadingLock_lock_fd_pidselfs    r   __init__zResourceTracker.__init__8   s#    ^%%
			r   c                     | j         5  | j        	 d d d            d S t          j        | j                   d | _        t          j        | j        d           d | _        d d d            d S # 1 swxY w Y   d S )Nr   )r   r   osclosewaitpidr   r   s    r   _stopzResourceTracker._stop=   s    Z 
	 
	x
	 
	 
	 
	 
	 
	 
	 
	 HTXDHJty!$$$DI
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	s   	A,AA,,A03A0c                 8    |                                   | j        S r   )r   r   r   s    r   getfdzResourceTracker.getfdJ   s    xr   c                    | j         5  | j        |                                 r	 ddd           dS t          j        | j                   	 | j        t          j        | j        d           n# t          $ r Y nw xY wd| _        d| _        t          j	        d           g }	 |
                    t          j                                                   n# t          $ r Y nw xY wd}t          j                    \  }}	 |
                    |           t!          j                    }|gt%          j                    z   }|d||z  gz  }	 t(          r$t+          j        t*          j        t0                     t%          j        |||          }t(          r$t+          j        t*          j        t0                     n1# t(          r%t+          j        t*          j        t0                     w w xY w|| _        || _        n#  t          j        |            xY w	 t          j        |           n# t          j        |           w xY w	 ddd           dS # 1 swxY w Y   dS )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.Nr   zUresource_tracker: process died unexpectedly, relaunching.  Some resources might leak.z:from multiprocessing.resource_tracker import main;main(%d)z-c)r   r   _check_aliver!   r"   r   r#   ChildProcessErrorwarningswarnappendsysstderrfileno	Exceptionpiper   get_executabler   _args_from_interpreter_flags_HAVE_SIGMASKsignalr	   	SIG_BLOCK_IGNORED_SIGNALSspawnv_passfdsSIG_UNBLOCK)r   fds_to_passcmdrwexeargspids           r   r   zResourceTracker.ensure_runningN   s   
 Z 9	 9	x#$$&& 9	 9	 9	 9	 9	 9	 9	 9	 """ y,
49a000(   D   	 I J J J K""3:#4#4#6#67777   NC799DAq""1%%%*,,ut@BBBsQw'U$ S.v/?AQRRR-c4EEC$ U.v/ACSTTT % U.v/ACSTTTTU 		 s9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	s   II!A.-I.
A;8I:A;;'I#1CI
C"I!C""I>A	G5AF5	,G55.G##G5&H%5HH%I%H;;IIIc                 ^    	 t          j        | j        d           dS # t          $ r Y dS w xY w)z;Check that the pipe has not been closed by sending a probe.s   PROBE:0:noop
TF)r!   writer   OSErrorr   s    r   r(   zResourceTracker._check_alive   sI    	 HTX0111 4  	 	 	55	s    
,,c                 4    |                      d||           dS )z0Register name of resource with resource tracker.REGISTERN_sendr   namertypes      r   r   zResourceTracker.register   s    

:tU+++++r   c                 4    |                      d||           dS )z2Unregister name of resource with resource tracker.
UNREGISTERNrF   rH   s      r   r   zResourceTracker.unregister   s    

<u-----r   c                 v   |                                   d                    |||                              d          }t          |          dk    rt	          d          t          j        | j        |          }|t          |          k    s+J d                    |t          |                                d S )Nz{0}:{1}:{2}
asciii   zmsg too longznbytes {0:n} but len(msg) {1:n})r   formatencodelen
ValueErrorr!   rB   r   )r   r;   rI   rJ   msgnbytess         r   rG   zResourceTracker._send   s    $$S$66==gFFs88c>> ^,,,$(C((S!!!#D#K#KCHH$ $!!!!!r   N)__name__
__module____qualname__r   r$   r&   r   r(   r   r   rG   r   r   r   r   r   6   s          
    > > >@	 	 	, , ,. . .	 	 	 	 	r   r   c                    t          j         t           j        t           j                   t          j         t           j        t           j                   t          r$t          j        t           j        t                     t          j	        t          j
        fD ]'}	 |                                 # t          $ r Y $w xY wd t                                          D             }	 t          | d          5 }|D ]	}	 |                                                    d                              d          \  }}}t                              |d          }|t)          d| d|           |dk    r||                             |           n;|d	k    r||                             |           n|d
k    rnt/          d|z            # t          $ r, 	 t          j        t          j                      n#  Y nxY wY w xY w	 ddd           n# 1 swxY w Y   |                                D ]\  }}|r8	 t7          j        dt;          |          |fz             n# t          $ r Y nw xY w|D ]P}	 	 t          |         |           n1# t          $ r$}	t7          j        d|d|	           Y d}	~	nd}	~	ww xY wL# w xY wdS # |                                D ]\  }}|r8	 t7          j        dt;          |          |fz             n# t          $ r Y nw xY w|D ]P}	 	 t          |         |           n1# t          $ r$}	t7          j        d|d|	           Y d}	~	nd}	~	ww xY wL# w xY ww xY w)zRun resource tracker.c                 ,    i | ]}|t                      S r   )set).0rJ   s     r   
<dictcomp>zmain.<locals>.<dictcomp>   s    ===eUCEE===r   rbrN   :NzCannot register z. for automatic cleanup: unknown resource type rE   rL   PROBEzunrecognized command %rzQresource_tracker: There appear to be %d leaked %s objects to clean up at shutdownzresource_tracker: z: )r5   SIGINTSIG_IGNSIGTERMr4   r	   r9   r7   r-   stdinstdoutr"   r0   _CLEANUP_FUNCSkeysopenstripdecodesplitgetrR   addremoveRuntimeError
excepthookexc_infoitemsr*   r+   rQ   )
fdfcacheliner;   rI   rJ   cleanup_funcrtype_cachees
             r   mainry      s    M&-000
M&.&.111 Ev13CDDDi$  	GGIIII 	 	 	D	 >=~':':'<'<===E-"d^^ 	q  '+zz||':':7'C'C'I'I#'N'N$Cu#1#5#5eT#B#BL#+(=t = =5:= => > > j((e((....,,e++D1111*+Ds+JKKK    777	#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	2 #(++-- 	 	E; M #N#&{#3#3U";#< = = = = !   D# 
 
N&u-d3333$ N N N DDD!!&LMMMMMMMMN DDDD
	 	%++-- 	 	E; M #N#&{#3#3U";#< = = = = !   D# 
 
N&u-d3333$ N N N DDD!!&LMMMMMMMMN DDDD
	s!  B..
B;:B;"K 2H9CGH
G=G21G=2G6	4G=9H<G==HK HK HK 4&I
I('I(1JJ9
J5J0+J90J55J99J;M*&LM*
L	M*L	M*L10M#1
M;MM#MM#"M*#M%%M*)r!   r5   r-   r   r*    r   r   __all__hasattrr4   r`   rb   r7   re   rI   _multiprocessing_posixshmemupdater   
shm_unlinkobjectr   _resource_trackerr   r   r   r&   ry   r   r   r   <module>r      s  $ 
			  



                 
6
6
6 122M6>2  LL 7g w.. )4
 	 	 	 /   
t t t t tf t t tn $O%% "1%)
< < < < <r   