
    5bhE+                        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 G d de      Z e       Zej4                  Zej6                  Zej8                  Zej:                  Zd Zy)    N   )spawn)util)ensure_runningregister
unregisterpthread_sigmasknoopc                       y N r       J/opt/python-3.12.12/usr/lib/python3.12/multiprocessing/resource_tracker.py<lambda>r   !   s    Dr   posix
sem_unlink	semaphoreshared_memoryc                       e Zd Zy)ReentrantCallErrorN)__name__
__module____qualname__r   r   r   r   r   6   s    r   r   c                       e Zd Zd Zd Zd ZddZej                  ej                  ej                  fdZd Zd Zd Zd	 Zd
 Zd Zy)ResourceTrackerc                 R    t        j                         | _        d | _        d | _        y r   )	threadingRLock_lock_fd_pidselfs    r   __init__zResourceTracker.__init__<   s    __&
	r   c                     t        d      )Nz8Reentrant call into the multiprocessing resource tracker)r   r"   s    r   _reentrant_call_errorz%ResourceTracker._reentrant_call_errorA   s    
 !FH 	Hr   c                 (    | j                  d       y )NF)use_blocking_lock)_stopr"   s    r   __del__zResourceTracker.__del__I   s     	

U
+r   c                 D   |r&| j                   5  | j                          d d d        y | j                   j                  d      }	 | j                          |r| j                   j                          y y # 1 sw Y   y xY w# |r| j                   j                          w w xY w)NF)blocking)r   _stop_lockedacquirerelease)r#   r(   acquireds      r   r)   zResourceTracker._stopO   s    !!#  zz))5)9H)!!#JJ&&(   JJ&&( s   A4B  4A= Bc                     | j                   j                         dkD  r| j                         S | j                  y | j                  y  || j                         d | _         || j                  d       d | _        y )Nr   r   )r   _recursion_countr&   r    r!   )r#   closewaitpidwaitstatus_to_exitcodes       r   r-   zResourceTracker._stop_locked[   sk     ::&&(1,--//8899 	dhh		1	r   c                 :    | j                          | j                  S r   )r   r    r"   s    r   getfdzResourceTracker.getfdr   s    xxr   c                 *   	 | j                   5  | j                   j                         dkD  r| j                         cd d d        S | 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  }d }	 t,        r(t/        j0                  t.        j2                  t4              }t)        j6                  |||      }|%t/        j0                  t.        j8                  |       	 || _        || _        	 t        j                  |       	 d d d        y # t        $ r Y ]w xY w# t         $ r Y w xY w# |%t/        j0                  t.        j8                  |       w w xY w#  t        j                  |        xY w# t        j                  |       w xY w# 1 sw Y   y xY w)Nr   r   zUresource_tracker: process died unexpectedly, relaunching.  Some resources might leak.z:from multiprocessing.resource_tracker import main;main(%d)z-c)r   r2   r&   r    _check_aliveosr3   r!   r4   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_SETMASK)	r#   fds_to_passcmdrwexeargsprev_sigmaskpids	            r   r   zResourceTracker.ensure_runningv   s*   	/ ZZzz**,q0113 Z xx#$$& Z " yy,

499a0   	 I J K""3::#4#4#67 OC779DAq""1%**,ut@@BBsQw'  $Q$'-'='=f>N>NP`'a--c4EC#/..v/A/A<P
 	{ Z$ )   , $/..v/A/A<P 0
 { Zs   -J	J	+J	,H7%J	-H
J	$A	I.AH(3'II/)J		HJ	HJ		H%!J	$H%%J	()III,,I//JJ		Jc                 f    	 	 t        j                  | j                  d       y# t        $ r Y yw xY w)Ns   PROBE:0:noop
TF)r:   writer    OSErrorr"   s    r   r9   zResourceTracker._check_alive   s8    I	 HHTXX01   		s    $ 	00c                 ,    	 | j                  d||       y )NREGISTER_sendr#   namertypes      r   r   zResourceTracker.register   s    >

:tU+r   c                 ,    	 | j                  d||       y )N
UNREGISTERrY   r[   s      r   r   zResourceTracker.unregister   s    @

<u-r   c                 2   	 | j                          dj	                  |||      j                  d      }t        |      dkD  rt        d      t        j                  | j                  |      }y # t        $ r t        j                  d| d|d       Y w xY w)NzSResourceTracker called reentrantly for resource cleanup, which is unsupported. The z object z might leak.z{0}:{1}:{2}
asciii   zmsg too long)r   r   r<   r=   formatencodelen
ValueErrorr:   rU   r    )r#   rM   r\   r]   msgnbytess         r   rZ   zResourceTracker._send   s    
	<! $$S$6==gFs8c> ^,,$((C( " 	<
 MMgXdX\;<	<s   A. .%BBN)T)r   r   r   r$   r&   r*   r)   r:   r3   r4   r5   r-   r7   r   r9   r   r   rZ   r   r   r   r   r   :   sU    
H,
) hh

!88	.BH	,.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)Nrbra   :zCannot register z. for automatic cleanup: unknown resource type rX   r_   PROBEzunrecognized command %rzQresource_tracker: There appear to be %d leaked %s objects to clean up at shutdownzresource_tracker: z: )rG   SIGINTSIG_IGNSIGTERMrF   r	   SIG_UNBLOCKrI   r?   stdinstdoutr3   rB   _CLEANUP_FUNCSkeyssetopenstripdecodesplitgetre   addremoveRuntimeError
excepthookexc_infoitemsr<   r=   rd   )
fdfr]   cachelinerM   r\   cleanup_funcrtype_cachees
             r   mainr      s   
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  $ #0?  		 >* ! 7	% ^> !  % N D!&LMMN % #(++-E;MM #N#&{#3U";#< = ! #N&u-d3$ N D!&LMMN D $ #0s  8H H5J/ IB#H!+I.J/ #I*9I9	HH!	I+$III	IIIII'#J/ *	I65I69	J'J"J*"J''J**J,/M	#K-,M-	K9	6M8K9	9MLM	M L;6M;M  MMMM)r:   rG   r?   r   r<    r   r   __all__hasattrrF   rl   rn   rI   rr   r\   _multiprocessing_posixshmemupdater   
shm_unlinkr|   r   objectr   _resource_trackerr   r   r   r7   r   r   r   r   <module>r      s  $ 
  
    
6 12MM6>>2  L 77g .)44
 	 // 
	 	ff fR $% "11%%))
<r   