
    .hh                         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/r
\R                  S:X  a  \
S/-  r
 " S	 S\5      rO\
S
/-  r
 " S S
\5      r " S S\5      r\" 5       r\R"                  rg)    N   )process)	reduction)utilstopwin32	DupSocketc                        \ rS rSrS rS rSrg)r	      c                 |   ^ UR                  5       mU4S jn[        R                  UTR                  5      U l        g )Nc                 J   > TR                  U5      nU R                  U5        g N)share
send_bytes)connpidr   new_socks      H/opt/python-3.13.8/usr/lib/python3.13/multiprocessing/resource_sharer.pysend DupSocket.__init__.<locals>.send   s     s+&    )dup_resource_sharerregisterclose_id)selfsockr   r   s      @r   __init__DupSocket.__init__   s-    xxzH' (00x~~FDHr   c                     [         R                  U R                  5       nUR                  5       n[        R
                  " U5      sS S S 5        $ ! , (       d  f       g = fr   )r   get_connectionr   
recv_bytessocket	fromshare)r   r   r   s      r   detachDupSocket.detach$   s<    !00:d)''. ;::s   &A
Ar   N__name__
__module____qualname____firstlineno__r   r&   __static_attributes__ r   r   r	   r	      s    	G	/r   DupFdc                        \ rS rSrS rS rSrg)r0   -   c                 ~   ^ [         R                  " U5      mU4S jnU4S jn[        R                  X#5      U l        g )Nc                 6   > [         R                  " U TU5        g r   )r   send_handle)r   r   new_fds     r   r   DupFd.__init__.<locals>.send1   s    %%dFC8r   c                  2   > [         R                  " T 5        g r   )osr   )r6   s   r   r   DupFd.__init__.<locals>.close3   s     r   )r9   r   r   r   r   )r   fdr   r   r6   s       @r   r   DupFd.__init__/   s,    VVBZF9!'00=DHr   c                     [         R                  U R                  5       n[        R                  " U5      sS S S 5        $ ! , (       d  f       g = fr   )r   r"   r   r   recv_handle)r   r   s     r   r&   DupFd.detach7   s0    !00:d ,,T2 ;::s   A  
Ar(   Nr)   r/   r   r   r0   r0   -   s    	>	3r   c                   L    \ rS rSrS rS r\S 5       rSS jrS r	S r
S	 rS
rg)_ResourceSharer=   c                     SU l         0 U l        [        R                  " 5       U l        S U l        S U l        S U l        [        R                  " U [        R                  5        g )Nr   )_key_cache	threadingLock_lock	_listener_address_threadr   register_after_forkrA   
_afterfork)r   s    r   r   _ResourceSharer.__init__?   sI    	^^%
  'A'ABr   c                    U R                      U R                  c  U R                  5         U =R                  S-  sl        X4U R                  U R                  '   U R                  U R                  4sS S S 5        $ ! , (       d  f       g = f)Nr   )rH   rJ   _startrD   rE   )r   r   r   s      r   r   _ResourceSharer.registerH   sW    ZZ}}$IINI&*]DKK		"MM499- ZZs   A$A;;
B	c                     SSK Jn  U u  p#U" U[        R                  " 5       R                  S9nUR                  U[        R                  " 5       45        U$ )Nr   Clientauthkey)
connectionrT   r   current_processrV   r   r9   getpid)identrT   addresskeycs        r   r"   _ResourceSharer.get_connectionQ   sE     	'7G$;$;$=$E$EF	RYY[!"r   Nc                    SSK Jn  U R                     U R                  Gb  U" U R                  [        R
                  " 5       R                  S9nUR                  S 5        UR                  5         U R                  R                  U5        U R                  R                  5       (       a  [        R                  " S5        U R                  R                  5         S U l	        S U l        S U l        U R                  R!                  5        H  u  nu  pVU" 5         M     U R                  R#                  5         S S S 5        g ! , (       d  f       g = f)Nr   rS   rU   z._ResourceSharer thread did not stop when asked)rW   rT   rH   rJ   r   rX   rV   r   r   rK   joinis_aliver   sub_warningrI   rE   itemsclear)r   timeoutrT   r]   r\   r   r   s          r   r   _ResourceSharer.stopZ   s    &ZZ}}(4==#*#:#:#<#D#DFt	!!'*<<((**$$ &; <$$&# $!%*.++*;*;*=&C$G +>!!#! ZZs   D$E  
Ec                 >   U R                   R                  5        H  u  nu  p#U" 5         M     U R                   R                  5         U R                  R	                  5         U R
                  b  U R
                  R                  5         S U l        S U l        S U l        g r   )	rE   rc   rd   rH   _at_fork_reinitrI   r   rJ   rK   )r   r\   r   r   s       r   rM   _ResourceSharer._afterforko   st    "&++"3"3"5C$G #6

""$>>%NN  "r   c                 :   SSK Jn  [        R                  " S5        U" [        R
                  " 5       R                  SS9U l        U R                  R                  U l	        [        R                  " U R                  S9nSUl        UR                  5         X l        g )Nr   )Listenerz0starting listener and thread for sending handles   )rV   backlog)targetT)rW   rk   r   debugr   rX   rV   rI   r[   rJ   rF   Thread_servedaemonstartrK   )r   rk   ts      r   rP   _ResourceSharer._startz   sj    (

EF!'*A*A*C*K*KUXY..DKK0		r   c                 P   [        [        S5      (       a8  [        R                  " [        R                  [        R                  " 5       5          U R
                  R                  5        nUR                  5       nUc
   S S S 5        g Uu  p4U R                  R                  U5      u  pV U" X5        U" 5          S S S 5        Mu  ! U" 5         f = f! , (       d  f       N= f!   [        R                  " 5       (       d&  [        R                  " [        R                  " 5       6    Nc= f)Npthread_sigmask)hasattrsignalrw   	SIG_BLOCKvalid_signalsrI   acceptrecvrE   popr   
is_exitingsys
excepthookexc_info)r   r   msgr\   destination_pidr   r   s          r   rq   _ResourceSharer._serve   s    6,--""6#3#3V5I5I5KL4^^**,))+C{ -, ,/(C"&++//#"6KD T3 -   -,4((NNCLLN3sO   C! *C?C! !C*C2C:C! 	CC
CC! C! !AD%)rJ   rE   rD   rI   rH   rK   r   )r*   r+   r,   r-   r   r   staticmethodr"   r   rM   rP   rq   r.   r/   r   r   rA   rA   =   s5    C.  $*		4r   rA   )r9   ry   r$   r   rF    r   contextr   r   __all__platformobjectr	   r0   rA   r   r   r/   r   r   <module>r      s    
   
    ( <<7}G/F /  yG3 3 Y4f Y4x #$ r   