
    ѝi;                     "   S SK r 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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\R0                  05        \R/                  S\R2                  05         " S S\5      r " S S\5      r\" 5       r\R>                  r\R@                  r \RB                  r!\RD                  r"S 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    2lib/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S jrS rS rS rS rS rSrg)ResourceTrackerB   c                     [         R                  " 5       U l        S U l        S U l        S U l        [        5       U l        SU l        g )NT)		threadingRLock_lock_fd_pid	_exitcoder   _reentrant_messages_use_simple_formatselfs    r   __init__ResourceTracker.__init__D   s9    __&
	#(7  #'r   c                     [        S5      e)Nz8Reentrant call into the multiprocessing resource tracker)r   r0   s    r   _reentrant_call_error%ResourceTracker._reentrant_call_errorR   s    
 !FH 	Hr   c                 "    U R                  SS9  g )NF)use_blocking_lock)_stopr0   s    r   __del__ResourceTracker.__del__Z   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)r1   r8   acquireds      r   r9   ResourceTracker._stop`   s    !!#  zz))5)9H)!!#JJ&&(   JJ&&( s   A;B ;
B	$B0c                    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        S U l         g f = f! [         a
    S U l         g f = f)Nr   r   )r*   _recursion_countr5   r+   r,   ChildProcessErrorr-   
ValueError)r1   closewaitpidwaitstatus_to_exitcode_statuss         r   r>   ResourceTracker._stop_lockedl   s     ::&&(1,,,..8899 	dhh			1-IA 		"3F;DN ! 	DI!DN	  	"!DN	"s$   %B B. B+*B+.CCc                 :    U R                  5         U R                  $ r   )r   r+   r0   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_writer0   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.)	osrG   r+   r,   rH   rE   r-   warningswarnr0   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	ExceptionrT   piper   get_executabler   _args_from_interpreter_flags_HAVE_SIGMASKsignalr
   	SIG_BLOCK_IGNORED_SIGNALSspawnv_passfdsSIG_SETMASKr+   r,   rG   )r1   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c                 |    U R                   (       a  g[        R                  " SSS.SSS9S-   R                  S	5      $ )
zReturn a probe message.s   PROBE:0:noop
PROBEr   )cmdrtypeT,:ensure_ascii
separators
ascii)r/   jsondumpsencoder0   s    r   _make_probe_message#ResourceTracker._make_probe_message   sB    ""$JJ&1!%
  &/	r   Nc                    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  U R                  5       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   )r*   rD   r5   r.   r[   r+   r   _writeOSErrorrW   rp   popleft
IndexError)r1   msgto_sendreentrant_msgs       r   rQ   )ResourceTracker._ensure_running_and_write   s!   ZZzz**,q0;4466//66s; Z xx#;"668G!G#KK(
 + .  $ 8 8 @ @ B KK&   #//1LLN# Z4   ?KK sH   AD##DC"D5D# "*DDDD
D #
D0/D0c                      [         R                  " U R                  U R                  5       5        g! [         a     gf = f)z;Check that the pipe has not been closed by sending a probe.TF)rT   writer+   r   r   r0   s    r   _check_aliveResourceTracker._check_alive  s=    	 HHTXXt779:   		s   /2 
??c                 (    U R                  SX5        g)z0Register name of resource with resource tracker.REGISTERN_sendr1   r   ru   s      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)=)rT   r   r+   len)r1   r   nbytess      r   r   ResourceTracker._write  s>    $((C(S!>gfYn3s8+#>>!r   c                 R   U R                   (       aL  SU;  aF  U SU SU S3R                  S5      n[        U5      S:  a  [        S5      eU R	                  U5        g UR                  SS5      n[        U5      S:  a  [        S	5      e[
        R                  " U5      R                  S5      nXUS
.n[        R                  " USSS9S-   R                  S5      n[        U5      S::  d   S[        U5       S35       eUR                  S5      (       d   eU R	                  U5        g )Nr|   rx   r}   i   zmsg too longutf-8surrogateescape   z+shared memory name too long (max 255 bytes))rt   ru   base64_nameTrv   ry   z"internal error: message too long (z bytes)   {)r/   r   r   rF   rQ   base64urlsafe_b64encodedecoder~   r   
startswith)r1   rt   r   ru   r   bb64payloads           r   r   ResourceTracker._send  s   ""t4'7E4&%+227;C3x#~ !00**3/ KK!23q6C<JKK&&q)009cBzz'LtS[[\cd 3x3V"DSXJg VV~~d####&&s+r   )r-   r+   r*   r,   r.   r/   )Tr   )r   r    r!   r"   r2   r5   r:   r9   rT   rG   rH   rI   r>   rN   r   rW   rp   r   rQ   r   r   r	   r   r   r#   r   r   r   r%   r%   B   sp    'H,
) hh

!88	!"F0B&&PB	,.?,r   r%   c                    U R                  S5      (       a   [        R                  " U R                  S5      5      nUS   nUS   nUR                  SS5      n[        U[        5      (       a*  [        U[        5      (       a  [        U[        5      (       d  [        SU< 35      e [        R                  " U5      R                  S	S
5      nOAU R                  5       R                  S5      R                  SSS9u  p7UR                  SSS9u  pdX4U4$ ! [         a  n[        SU < 35      UeS nAff = f! [
         a  n[        SU< 35      UeS nAff = f)Nr   r}   z$malformed resource_tracker message: rt   ru   r    z#malformed resource_tracker fields: r   r   z(malformed resource_tracker base64_name: rx   r   )maxsplit)r   r~   loadsr   r_   rF   get
isinstancestrr   urlsafe_b64decodestripsplitrsplit)lineobjert   ru   r   r   rests           r   _decode_messager   B  s=   t	X**T[[12C %jGww}b)#s##:eS+A+ATWY\I]I]MNN	[++C077ARSD JJL''066sQ6G	kk#k2t#  	XOPVWW	X  	[SRSYZZ	[s/   %D (&D6 
D3D..D36
E EEc                 j   [         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5      u  pbn[        R%                  US5      nUc  ['        SU SU 35      eUS:X  a  X2   R)                  U5        MW  US:X  a  X2   R+                  U5        Mr  US:X  a  Mz  [-        S	U-  5      e   SSS5        UR3                  5        HY  u  p)U	(       a3   SnUS:X  a  O)[4        R6                  " S[9        U	5       SU SU	 35         U	 H  n  [        U   " U5        M     M[     [        R:                  " U5        g! [         a     GMz  f = fs  snf ! [         a8    S
n [        R.                  " [        R0                  " 5       6    GMd  !     GMk  = ff = f! , (       d  f       N= f! [         a     Nf = f! [         a*  n
Sn[4        R6                  " SU< SU
< 35         Sn
A
NSn
A
ff = f! f = f! UR3                  5        H  u  p)U	(       aC   SnUS:X  a  O9[4        R6                  " S[9        U	5       SU SU	 35        O! [         a     Of = fU	 HQ  n  [        U   " U5        O7! [         a*  n
Sn[4        R6                  " 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   rbNzCannot register z. for automatic cleanup: unknown resource type r   r   rs   z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: )rd   SIGINTSIG_IGNSIGTERMrc   r
   SIG_UNBLOCKrf   r\   stdinstdoutrG   r_   _CLEANUP_FUNCSkeyssetopenr   r   rF   addremover   
excepthookexc_infoitemsrU   rV   r   exit)fdfru   cache	exit_coder   rt   r   cleanup_funcrtype_cacher   s              r   mainr   Z  sd    MM&--0
MM&..&..1}v113CDii$	GGI % (6':':'<='<eCE\'<E=I9"d^q'6t'<$C#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  ?H')H9K  JAH>&J(H>JH>	JH>JK   J	(J9J$'
H65H6>J &I51J5I<	7J 8J<J  J
JK  
J! J!$
K. KKKKK N2>L0N2(L0/N20
L=	:N2<L=	=N2MN
N! NNNNN2N N2)%r   rT   rd   r\   r(   rU   collectionsr   r~   r   r   r   __all__hasattrrc   r   r   rf   r   r   r   _multiprocessing_posixshmemupdater   
shm_unlinkr   r   objectr%   _resource_trackerr   r   r	   rN   r   r   r   r   r   <module>r      s  $  	  
      
6 12MM6>>2 H 
 77g ..)44
 	 // 
	 	w,f w,r $% "11%%))
0Jr   