
    z%i#                        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(  rKd dlZd dlZ e	ed
      rej%                  dej&                  i       ej%                  dej(                  i        G d de      Z e       Zej0                  Zej2                  Zej4                  Zej6                  Zd Zy)    N   )spawn)util)ensure_runningregister
unregisterpthread_sigmasknoopc                       y N r       T/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/multiprocessing/resource_tracker.py<lambda>r   !   s    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
y	)
ResourceTrackerc                 R    t        j                         | _        d | _        d | _        y r   )	threadingLock_lock_fd_pidselfs    r   __init__zResourceTracker.__init__8   s    ^^%
	r   c                    | j                   5  | j                  
	 d d d        y t        j                  | j                         d | _        t        j                  | j
                  d       d | _        d d d        y # 1 sw Y   y xY w)Nr   )r   r   osclosewaitpidr   r   s    r   _stopzResourceTracker._stop=   sg    ZZ 
	xx
	 
	 HHTXXDHJJtyy!$DI
	 
	 
	s   A:AA::Bc                 :    | j                          | j                  S r   )r   r   r   s    r   getfdzResourceTracker.getfdJ   s    xxr   c                    | j                   5  | j                  | j                         r
	 ddd       yt        j                  | j                         	 | j
                   t        j                  | j
                  d       d| _        d| _        t        j                  d       g }	 |j                  t        j                  j                                d}t        j                         \  }}	 |j                  |       t!        j"                         }|gt%        j&                         z   }|d||z  gz  }	 t(        r(t+        j,                  t*        j.                  t0               t%        j2                  |||      }t(        r)t+        j,                  t*        j4                  t0               	 || _        || _        	 t        j                  |       	 ddd       y# t        $ r Y cw xY w# t        $ r Y  w xY w# t(        r)t+        j,                  t*        j4                  t0               w w xY w#  t        j                  |        xY w# t        j                  |       w xY w# 1 sw Y   yxY w)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   
 ZZ 9	xx#$$&9	 9	 " yy,

499a0   	 I J K""3::#4#4#67 OC779DAq""1%**,ut@@BBsQw'U$..v/?/?AQR--c4EC$..v/A/ACST
 	s9	 9	 )   * %..v/A/ACST %
 s9	 9	s   I I ,G %I &-G'I -AH+5AG7:/H+)I8I 	G$ I #G$$I '	G40I 3G44I 71H((H++IIII  I)c                 d    	 t        j                  | j                  d       y# t        $ r Y y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   s5    	 HHTXX01   		s    # 	//c                 *    | j                  d||       y)z0Register name of resource with resource tracker.REGISTERN_sendr   namertypes      r   r   zResourceTracker.register   s    

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

<u-r   c                 6   | j                          dj                  |||      j                  d      }t        |      dkD  rt	        d      t        j                  | j                  |      }|t        |      k(  s J dj                  |t        |                   y )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==gFs8c> ^,,$((C(S! 	#D#K#KCH$ 	!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 ]  }	 |j                           t        j                         D ci c]  }|t                }}	 t!        | d      5 }|D ]  }	 |j#                         j%                  d      j'                  d      \  }}}t        j)                  |d      }|t+        d| d|       |dk(  r||   j-                  |       n.|dk(  r||   j/                  |       n|d	k(  rnt1        d
|z         	 ddd       |j7                         D ]B  \  }}|r$	 t9        j:                  dt=        |      |fz         |D ]  }	 	 t        |   |        D y# t        $ r Y dw xY wc c}w # t        $ r1 	 t        j2                  t        j4                           n#  Y nxY wY Vw xY w# 1 sw Y   xY w# t        $ r Y w xY w# t        $ r%}	t9        j:                  d|d|	       Y d}	~	d}	~	ww xY w# w xY w# |j7                         D ]  \  }}|r4	 t9        j:                  dt=        |      |fz         n# t        $ r Y nw xY w|D ]I  }	 	 t        |   |       n1# t        $ r%}	t9        j:                  d|d|	       Y d}	~	nd}	~	ww xY wF# w xY w  w xY w)zRun resource tracker.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setopenstripdecodesplitgetrR   addremoveRuntimeError
excepthookexc_infoitemsr*   r+   rQ   )
fdfrJ   cacheliner;   rI   cleanup_funcrtype_cachees
             r   mainrv      s9    MM&--0
MM&..&..1v113CDii$ 	GGI (6':':'<=eUCE\=E=-"d^ 	q '+zz|':':7'C'I'I#'N$Cu#1#5#5eT#BL#+(.tf 555:G=> > j(e((.,e++D1*+Ds+JKK!	2 #(++- 	E;MM #N#&{#3U";#< =
 $ 
N&u-d3 
	?  		 >* ! 7	%	 	> !  % N D!&LMMN % #(++- 	E;MM #N#&{#3U";#< = ! # 
N&u-d3$ N D!&LMMN D
	s  7HH4J.  IB#H *I-J. #I)8I8	HH 	I*$III	IIIII&"J. )	I54I58	J&J!J)!J&&J))J+.M#K,+M,	K8	5M7K8	8MLM	L?L:5M:L??MMMM)r!   r5   r-   r   r*    r   r   __all__hasattrr4   r\   r^   r7   ra   rI   _multiprocessing_posixshmemupdater   
shm_unlinkobjectr   _resource_trackerr   r   r   r&   rv   r   r   r   <module>r      s   $ 
  
    
6 12MM6>>2  L 77g .)44
 	 // 
tf tn $% "11%%))
<r   