
    F\h.                         S SK r S SKrS SKrS SKrS SKrSSKJr  SSKJr  / SQr\	" \S5      r
\R                  \R                  4rS r\S S	.r\ R                   S
:X  aP  S SKrS SKr\	" \S5      (       a  \R'                  S\R(                  05        \R'                  S\R*                  05         " S S\5      r " S S\5      r\" 5       r\R6                  r\R8                  r\R:                  r\R<                  rS rg)    N   )spawn)util)ensure_runningregister
unregisterpthread_sigmaskc                     [        S5      e)Nz-noop should never be registered or cleaned up)RuntimeErrornames    7/usr/lib/python3.13/multiprocessing/resource_tracker.pycleanup_noopr       s    
F
GG    c                     g N r   s    r   <lambda>r   %   s    $r   )noopdummyposix
sem_unlink	semaphoreshared_memoryc                       \ rS rSrSrg)ReentrantCallError:   r   N)__name__
__module____qualname____firstlineno____static_attributes__r   r   r   r   r   :   s    r   r   c                       \ rS rSrS rS rS rSS jr\R                  \R                  \R                  4S jrS rS rS	 rS
 rS rS rSrg)ResourceTracker>   c                 b    [         R                  " 5       U l        S U l        S U l        S U l        g r   )	threadingRLock_lock_fd_pid	_exitcodeselfs    r   __init__ResourceTracker.__init__@   s%    __&
	r   c                     [        S5      e)Nz8Reentrant call into the multiprocessing resource tracker)r   r-   s    r   _reentrant_call_error%ResourceTracker._reentrant_call_errorF   s    
 !FH 	Hr   c                 "    U R                  SS9  g )NF)use_blocking_lock)_stopr-   s    r   __del__ResourceTracker.__del__N   s     	

U
+r   c                 f   U(       a&  U R                      U R                  5         S S S 5        g U R                   R                  SS9n U R                  5         U(       a  U R                   R                  5         g g ! , (       d  f       g = f! U(       a  U R                   R                  5         f f = f)NF)blocking)r)   _stop_lockedacquirerelease)r.   r5   acquireds      r   r6   ResourceTracker._stopT   s    !!#  zz))5)9H)!!#JJ&&(   JJ&&( s   A;B ;
B	$B0c                 L   U R                   R                  5       S:  a  U R                  5       $ U R                  c  g U R                  c  g U" U R                  5        S U l        U" U R                  S5      u  pES U l         U" U5      U l        g ! [         a
    S U l         g f = f)Nr   r   )r)   _recursion_countr2   r*   r+   r,   
ValueError)r.   closewaitpidwaitstatus_to_exitcode_statuss         r   r;   ResourceTracker._stop_locked`   s     ::&&(1,--//8899 	dhhDIIq)			"3F;DN 	"!DN	"s   B B#"B#c                 :    U R                  5         U R                  $ r   )r   r*   r-   s    r   getfdResourceTracker.getfd~   s    xxr   c                 p   U R                      U R                   R                  5       S:  a  U R                  5       sSSS5        $ U R                  b  U R	                  5       (       a
   SSS5        g[
        R                  " U R                  5         U R                  b!  [
        R                  " U R                  S5        SU l        SU l        SU l
        [        R                  " S5        / n UR                  [        R                  R!                  5       5        Sn[
        R$                  " 5       u  p4 UR                  U5        [&        R(                  " 5       nU/[*        R,                  " 5       -   nUSX#-  /-  nSn [.        (       a)  [0        R2                  " [0        R4                  [6        5      n[*        R8                  " XVU5      nUb%  [0        R2                  " [0        R:                  U5        X@l        Xl         [
        R                  " U5         SSS5        g! [         a     GNmf = f! ["         a     GN#f = f! Ub&  [0        R2                  " [0        R:                  U5        f f = f!   [
        R                  " U5        e = f! [
        R                  " U5        f = f! , (       d  f       g= f)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.r   Nr   zUresource_tracker: process died unexpectedly, relaunching.  Some resources might leak.z:from multiprocessing.resource_tracker import main;main(%d)z-c)r)   rA   r2   r*   _check_aliveosrC   r+   rD   ChildProcessErrorr,   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   ResourceTracker.ensure_running   s'   
 ZZzz**,q0113 Z xx#$$&& Z " yy,

499a0   	!% I J K""3::#4#4#67 OC779DA""1%**,ut@@BBsw'  $Q$}'-'='=f>N>NP`'a--cEC#/..v/A/A<P
 	} Z$ )   , $/..v/A/A<P 0
 } Zs   .J'#J'1 J'.H  -J'.-H1J'5A
I0 AI(I03J J' 
H.*J'-H..J'1
H?;J'>H??J'+I--I00J		JJ$$J''
J5c                 h     [         R                  " U R                  S5        g! [         a     gf = f)z;Check that the pipe has not been closed by sending a probe.s   PROBE:0:noop
TF)rN   writer*   OSErrorr-   s    r   rM   ResourceTracker._check_alive   s5    	 HHTXX01   		s   !$ 
11c                 (    U R                  SX5        g)z0Register name of resource with resource tracker.REGISTERN_sendr.   r   rtypes      r   r   ResourceTracker.register   s    

:t+r   c                 (    U R                  SX5        g)z2Unregister name of resource with resource tracker.
UNREGISTERNro   rq   s      r   r   ResourceTracker.unregister   s    

<-r   c                     U R                  5         SR	                  XU5      R                  S5      n[        U5      S:  a  [        S5      e[        R                  " U R                  U5      nU[        U5      :X  d    SR	                  U[        U5      5      5       eg ! [         a!    [        R                  " SU SU< S35         Nf = f)	NzSResourceTracker called reentrantly for resource cleanup, which is unsupported. The z object z might leak.z{0}:{1}:{2}
asciii   zmsg too longznbytes {0:n} but len(msg) {1:n})r   r   rP   rQ   formatencodelenrB   rN   rj   r*   )r.   ra   r   rr   msgnbytess         r   rp   ResourceTracker._send   s    
	<! $$S6==gFs8c> ^,,$((C(S! 	#D#K#KCH$ 	! " 	<
 MMgXdX\;<	<s   B (C	C	)r,   r*   r)   r+   N)T)r   r   r    r!   r/   r2   r7   r6   rN   rC   rD   rE   r;   rJ   r   rM   r   r   rp   r"   r   r   r   r$   r$   >   sU    H,
) hh

!88	"<CJ	,.r   r$   c                    [         R                   " [         R                  [         R                  5        [         R                   " [         R                  [         R                  5        [        (       a)  [         R
                  " [         R                  [        5        [        R                  [        R                  4 H  n UR                  5         M     [        R                  5        Vs0 s H  o"[        5       _M     nnSn [!        U S5       nU H  n UR#                  5       R%                  S5      R'                  S5      u  pgn[        R)                  US5      nUc  [+        SU SU 35      eUS:X  a  X2   R-                  U5        Mz  US	:X  a  X2   R/                  U5        M  US
:X  a  M  [1        SU-  5      e   SSS5        UR7                  5        HY  u  p)U	(       a3   SnUS:X  a  O)[8        R:                  " S[=        U	5       SU SU	 35         U	 H  n  [        U   " U5        M     M[     [        R>                  " U5        g! [         a     GM  f = fs  snf ! [         a8    Sn [        R2                  " [        R4                  " 5       6    GM  !     GM  = ff = f! , (       d  f       N= f! [         a     Nf = f! [         a*  n
Sn[8        R:                  " SU< SU
< 35         Sn
A
NSn
A
ff = f! f = f! UR7                  5        H  u  p)U	(       aC   SnUS:X  a  O9[8        R:                  " S[=        U	5       SU SU	 35        O! [         a     Of = fU	 HQ  n  [        U   " U5        O7! [         a*  n
Sn[8        R:                  " SU< SU
< 35         Sn
A
OSn
A
ff = fMN  ! f = f   M     [        R>                  " U5        f = f)zRun resource tracker.r   rbrx   :NzCannot register z. for automatic cleanup: unknown resource type rn   ru   PROBEzunrecognized command %r   r   r   z%resource_tracker: There appear to be z leaked z" objects to clean up at shutdown:    zresource_tracker: z: ) r[   SIGINTSIG_IGNSIGTERMrZ   r	   SIG_UNBLOCKr]   rS   stdinstdoutrC   rV   _CLEANUP_FUNCSkeyssetopenstripdecodesplitgetrB   addremover   
excepthookexc_infoitemsrP   rQ   r{   exit)fdfrr   cache	exit_codelinera   r   cleanup_funcrtype_cachees              r   mainr      s{    MM&--0
MM&..&..1}v113CDii$	GGI % (6':':'<='<eCE\'<E=I9"d^q'+zz|':':7'C'I'I#'N$Cu#1#5#5eT#BL#+(.tf 555:G=> > j(((.,++D1*+Ds+JKK!  4 #(++-E !I'  C";/0 @55@MC $N&u-d3
  $! #0: 	  		 >. !  !I7% ^P !  % N$%	 D!&LMMN 7 #(++-E !I'  C";/0 @55@MC
 ! #N&u-d3$ N$%	 D!&LMMN D $! #0: 	sK  ?I
)IL J&A4I!	J&I!$J&&I!,J&.I!<J&>L #J7,(J7K

II!J#.&JJ&J	J#J&J##J&&
J40L 7
KK
K; K61K>6K;;K>>L O!M)O*(MO
M 	OM 	 O*M:9N3:
N. N)$N3)N..N31O3N55 O) rN   r[   rS   r'   rP    r   r   __all__hasattrrZ   r   r   r]   r   r   r   _multiprocessing_posixshmemupdater   
shm_unlinkr   r   objectr$   _resource_trackerr   r   r   rJ   r   r   r   r   <module>r      s  $ 
  
    
6 12MM6>>2 H 
 77g ..)44
 	 // 
	 	of od $% "11%%))
Jr   