
    Q/                        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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\R:                  r\R<                  r\R>                  r\R@                  r S r!g)    N)deque   )spawn)util)ensure_runningregister
unregisterpthread_sigmaskc                     [        S5      e)Nz-noop should never be registered or cleaned up)RuntimeErrornames    Mplatform/bundledpythonunix/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S jrS rS rS rS rS rSrg)ResourceTracker?   c                     [         R                  " 5       U l        S U l        S U l        S U l        [        5       U l        g r   )	threadingRLock_lock_fd_pid	_exitcoder   _reentrant_messagesselfs    r   __init__ResourceTracker.__init__A   s/    __&
	#(7 r   c                     [        S5      e)Nz8Reentrant call into the multiprocessing resource tracker)r   r/   s    r   _reentrant_call_error%ResourceTracker._reentrant_call_errorH   s    
 !FH 	Hr   c                 "    U R                  SS9  g )NF)use_blocking_lock)_stopr/   s    r   __del__ResourceTracker.__del__P   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)r0   r7   acquireds      r   r8   ResourceTracker._stopV   s    !!#  zz))5)9H)!!#JJ&&(   JJ&&( s   A;B ;
B	$B0c                 L   U R                   R                  5       S:  a  U R                  5       e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_countr4   r+   r,   r-   
ValueError)r0   closewaitpidwaitstatus_to_exitcode_statuss         r   r=   ResourceTracker._stop_lockedb   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                 "    U R                  5       $ )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.)_ensure_running_and_writer/   s    r   r   ResourceTracker.ensure_running   s    
 --//r   c                    [         R                  " U R                  5         U R                  b!  [         R                  " U R                  S5        S U l        S U l        S U l        [        R                  " S5        g ! [
         a     N8f = f)Nr   zUresource_tracker: process died unexpectedly, relaunching.  Some resources might leak.)	osrE   r+   r,   rF   ChildProcessErrorr-   warningswarnr/   s    r   _teardown_dead_process&ResourceTracker._teardown_dead_process   ss    
	 yy$

499a( 	 A 	B ! 		s   .A< <
B	B	c                 >   / n UR                  [        R                  R                  5       5        [
        R                  " 5       u  p# UR                  U5        [        R                  " 5       nU/[        R                  " 5       QSPSU S3PnS n [        (       a)  [        R                  " [        R                  [        5      n[        R                   " XEU5      nUb%  [        R                  " [        R"                  U5        X0l        Xpl         [
        R(                  " U5        g ! [         a     GNf = f! Ub&  [        R                  " [        R"                  U5        f f = f!   [
        R(                  " U5        e = f! [
        R(                  " U5        f = f)Nz-cz7from multiprocessing.resource_tracker import main;main())appendsysstderrfileno	ExceptionrR   piper   get_executabler   _args_from_interpreter_flags_HAVE_SIGMASKsignalr
   	SIG_BLOCK_IGNORED_SIGNALSspawnv_passfdsSIG_SETMASKr+   r,   rE   )r0   fds_to_passrwexeargsprev_sigmaskpids           r   _launchResourceTracker._launch   s[   	szz0023 wwy	q!&&(C224  J!AN	D  LM =#)#9#9&:J:JL\#]L))#[A+**6+=+=|L
 HIHHQKE  		2  +**6+=+=|L ,	HHQK
 HHQKsI   -D) 	AE( AD: (E( F )
D76D7:+E%%E( (FF FNc                 v   U R                      U R                   R                  5       S:  a7  Uc  U R                  5       eU R                  R	                  U5      sS S S 5        $ U R
                  b  Uc  SnOUn U R                  U5        S nOU R                  5         S S S 5          U R                  R                  5       nU R                  U5        M.  ! [         a#    U R                  5         U R                  5          Nvf = f! , (       d  f       Nm= f! [         a     Of = fUb  U R                  U5        g g )Nr      PROBE:0:noop
)r*   rC   r4   r.   rZ   r+   _writeOSErrorrV   ro   popleft
IndexError)r0   msgto_sendreentrant_msgs       r   rO   )ResourceTracker._ensure_running_and_write   s   ZZzz**,q0;4466//66s; Z xx#;/G!G#KK(
 + .  $ 8 8 @ @ B KK&   #//1LLN# Z4   ?KK sH   AD#D9C
D'D *D>D DD
D
D"!D"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.rr   TF)rR   writer+   rt   r/   s    r   _check_alive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r0   r   rtypes      r   r   ResourceTracker.register   s    

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

<-r   c                     [         R                  " U R                  U5      nU[        U5      :X  d   SU< S[        U5      < 35       eg )Nznbytes=z != len(msg)=)rR   r|   r+   len)r0   rw   nbytess      r   rs   ResourceTracker._write   s>    $((C(S!>gfYn3s8+#>>!r   c                     U SU SU S3R                  S5      n[        U5      S:  a  [        S5      eU R                  U5        g )N:
asciii   zmsg too long)encoder   rD   rO   )r0   cmdr   r   rw   s        r   r   ResourceTracker._send   sK    QtfAeWB'..w7s8c> ^,,&&s+r   )r-   r+   r*   r,   r.   )Tr   )r   r    r!   r"   r1   r4   r9   r8   rR   rE   rF   rG   r=   rL   r   rV   ro   rO   r}   r   r	   rs   r   r#   r   r   r   r%   r%   ?   sj    +H,
) hh

!88	"<0B&&PB	,.?,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   rbr   r   NzCannot register z. for automatic cleanup: unknown resource type r   r   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: ) rc   SIGINTSIG_IGNSIGTERMrb   r
   SIG_UNBLOCKre   r[   stdinstdoutrE   r^   _CLEANUP_FUNCSkeyssetopenstripdecodesplitgetrD   addremover   
excepthookexc_infoitemsrT   rU   r   exit)fdfr   cache	exit_codeliner   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)"rR   rc   r[   r(   rT   collectionsr    r   r   __all__hasattrrb   r   r   re   r   r   r   _multiprocessing_posixshmemupdater   
shm_unlinkr   r   objectr%   _resource_trackerr   r   r	   rL   r   r   r   r   <module>r      s  $ 
  
     
6 12MM6>>2 H 
 77g ..)44
 	 // 
	 	F,f F,P $% "11%%))
Jr   