
    z%i                         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 ddlm	Z	 dgZ
ej                  dk(  re
dgz  Z
 G d	 de      Zne
d
gz  Z
 G d d
e      Z G d de      Z e       Zej"                  Zy)    N   )process)	reduction)utilstopwin32	DupSocketc                       e Zd Z	 d Zd Zy)r	   c                 z    |j                         fd}t        j                  |j                        | _        y )Nc                 J    j                  |      }| j                  |       y N)share
send_bytes)connpidr   new_socks      S/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/multiprocessing/resource_sharer.pysendz DupSocket.__init__.<locals>.send   s     s+&    )dup_resource_sharerregisterclose_id)selfsockr   r   s      @r   __init__zDupSocket.__init__   s-    xxzH' (00x~~FDHr   c                     	 t         j                  | j                        5 }|j                         }t	        j
                  |      cd d d        S # 1 sw Y   y xY wr   )r   get_connectionr   
recv_bytessocket	fromshare)r   r   r   s      r   detachzDupSocket.detach$   sH    C!00: /d)''./ / /s   %AAN__name__
__module____qualname__r   r#    r   r   r	   r	      s    -	G	/r   DupFdc                       e Zd Z	 d Zd Zy)r)   c                 z    t        j                  |      fd}fd}t        j                  ||      | _        y )Nc                 4    t        j                  | |       y r   )r   send_handle)r   r   new_fds     r   r   zDupFd.__init__.<locals>.send1   s    %%dFC8r   c                  0    t        j                          y r   )osr   )r.   s   r   r   zDupFd.__init__.<locals>.close3   s     r   )r0   r   r   r   r   )r   fdr   r   r.   s       @r   r   zDupFd.__init__/   s.    VVBZF9!'00u=DHr   c                     	 t         j                  | j                        5 }t        j                  |      cd d d        S # 1 sw Y   y xY wr   )r   r   r   r   recv_handle)r   r   s     r   r#   zDupFd.detach7   s<    ?!00: 3d ,,T23 3 3s   A  A	Nr$   r(   r   r   r)   r)   -   s    ;	>	3r   c                   D    e Zd Z	 d Zd Zed        Zd	dZd Zd Z	d Z
y)
_ResourceSharerc                     d| _         i | _        t        j                         | _        d | _        d | _        d | _        t        j                  | t        j                         y )Nr   )_key_cache	threadingLock_lock	_listener_address_threadr   register_after_forkr5   
_afterfork)r   s    r   r   z_ResourceSharer.__init__?   sI    	^^%
  'A'ABr   c                    	 | j                   5  | j                  | j                          | xj                  dz  c_        ||f| j                  | j                  <   | j                  | j                  fcd d d        S # 1 sw Y   y xY w)Nr   )r;   r=   _startr7   r8   )r   r   r   s      r   r   z_ResourceSharer.registerH   sg    9ZZ 	.}}$IINI&*E]DKK		"MM499-	. 	. 	.s   A$A<<Bc                     	 ddl m} | \  }} ||t        j                         j                        }|j                  |t        j                         f       |S )Nr   Clientauthkey)
connectionrE   r   current_processrG   r   r0   getpid)identrE   addresskeycs        r   r   z_ResourceSharer.get_connectionQ   sH    J&7G$;$;$=$E$EF	RYY[!"r   Nc                    	 ddl m} | j                  5  | j                   || j                  t	        j
                         j                        }|j                  d        |j                          | j                  j                  |       | j                  j                         rt        j                  d       | j                  j                          d | _	        d | _        d | _        | j                  j!                         D ]  \  }\  }} |         | j                  j#                          d d d        y # 1 sw Y   y xY w)Nr   rD   rF   z._ResourceSharer thread did not stop when asked)rH   rE   r;   r=   r   rI   rG   r   r   r>   joinis_aliver   sub_warningr<   r8   itemsclear)r   timeoutrE   rN   rM   r   r   s          r   r   z_ResourceSharer.stopZ   s    H&ZZ 	$}}(4==#*#:#:#<#D#DFt	!!'*<<((*$$ &; <$$&# $!%*.++*;*;*= &C$G!!#!	$ 	$ 	$s   DD;;Ec                 :   | j                   j                         D ]  \  }\  }} |         | j                   j                          | j                  j	                          | j
                  | j
                  j                          d | _        d | _        d | _        y r   )	r8   rS   rT   r;   _at_fork_reinitr<   r   r=   r>   )r   rM   r   r   s       r   r@   z_ResourceSharer._afterforko   s{    "&++"3"3"5 	C$G	

""$>>%NN  "r   c                 @   ddl m} t        j                  d        |t	        j
                         j                        | _        | j                  j                  | _	        t        j                  | j                        }d|_        |j                          || _        y )Nr   )Listenerz0starting listener and thread for sending handlesrF   )targetT)rH   rY   r   debugr   rI   rG   r<   rL   r=   r9   Thread_servedaemonstartr>   )r   rY   ts      r   rB   z_ResourceSharer._startz   si    (

EF!'*A*A*C*K*KL..DKK0		r   c                 *   t        t        d      r6t        j                  t        j                  t        j                                	 	 | j
                  j                         5 }|j                         }|
	 d d d        y |\  }}| j                  j                  |      \  }}	  |||        |        	 d d d        v#  |        w xY w# 1 sw Y   xY w#  t        j                         s$t        j                  t        j                           Y UxY w)Npthread_sigmask)hasattrsignalrb   	SIG_BLOCKvalid_signalsr<   acceptrecvr8   popr   
is_exitingsys
excepthookexc_info)r   r   msgrM   destination_pidr   r   s          r   r]   z_ResourceSharer._serve   s    6,-""6#3#3V5I5I5KL4^^**, 	 ))+C{	  	  ,/(C"&++//#"6KD% T?3	   	  	 4(NNCLLN3sH   	C #C
7C  #C
$	B>-C
5C >	CC

CC :Dr   )r%   r&   r'   r   r   staticmethodr   r   r@   rB   r]   r(   r   r   r5   r5   =   s8    8C.  $*		4r   r5   )r0   rd   r!   rk   r9    r   contextr   r   __all__platformobjectr	   r)   r5   r   r   r(   r   r   <module>rv      s    
   
    ( <<7}G/F /  yG3 3 Y4f Y4x #$ r   