+
     Bi                        ^ RI t ^ RIt^ RIt^ RIt^ RIt^RIHt ^RIHt ^RIH	t	 R.t
]P                  R8X  d   ]
R.,          t
 ! R R]4      tM]
R	.,          t
 ! R
 R	]4      t ! R R]4      t]! 4       t]P"                  tR# )    N)process)	reduction)utilstopwin32	DupSocketc                   0   a  ] tR t^t o RtR tR tRtV tR# )r   zPicklable wrapper for a socket.c                ~   a VP                  4       oV3R  lp\        P                  VSP                  4      V n        R# )c                 L   < SP                  V4      pV P                  V4       R # N)share
send_bytes)connpidr   new_socks   && 6/usr/lib/python3.14/multiprocessing/resource_sharer.pysend DupSocket.__init__.<locals>.send   s     s+&    N)dup_resource_sharerregisterclose_id)selfsockr   r   s   && @r   __init__DupSocket.__init__   s-    xxzH' (00x~~FDHr   c                    \         P                  V P                  4      ;_uu_ 4       pVP                  4       p\        P
                  ! V4      uuRRR4       #   + '       g   i     R# ; i)z1Get the socket.  This should only be called once.N)r   get_connectionr   
recv_bytessocket	fromshare)r   r   r   s   &  r   detachDupSocket.detach$   sB    !00::d)''. ;:::s   &AA*	r   N	__name__
__module____qualname____firstlineno____doc__r   r$   __static_attributes____classdictcell____classdict__s   @r   r   r      s     -	G	/ 	/r   DupFdc                   0   a  ] tR t^-t o RtR tR tRtV tR# )r1   z-Wrapper for fd which can be used at any time.c                   a \         P                  ! V4      oV3R  lpV3R lp\        P                  W#4      V n        R# )c                 8   < \         P                  ! V SV4       R # r   )r   send_handle)r   r   new_fds   &&r   r   DupFd.__init__.<locals>.send1   s    %%dFC8r   c                  4   < \         P                  ! S 4       R # r   )osr   )r6   s   r   r   DupFd.__init__.<locals>.close3   s     r   N)r9   r   r   r   r   )r   fdr   r   r6   s   &&  @r   r   DupFd.__init__/   s,    VVBZF9!'00=DHr   c                    \         P                  V P                  4      ;_uu_ 4       p\        P                  ! V4      uuRRR4       #   + '       g   i     R# ; i)z-Get the fd.  This should only be called once.N)r   r    r   r   recv_handle)r   r   s   & r   r$   DupFd.detach7   s6    !00::d ,,T2 ;:::s   A		A	r&   Nr'   r/   s   @r   r1   r1   -   s     ;	>	3 	3r   c                   \   a  ] tR t^=t o RtR tR t]R 4       tRR lt	R t
R tR	 tR
tV tR# )_ResourceSharerz.Manager for resources using background thread.c                    ^ V n         / V n        \        P                  ! 4       V n        RV n        RV n        RV n        \        P                  ! V \        P                  4       R# )r   N)_key_cache	threadingLock_lock	_listener_address_threadr   register_after_forkrA   
_afterfork)r   s   &r   r   _ResourceSharer.__init__?   sI    	^^%
  'A'ABr   c                :   V P                   ;_uu_ 4        V P                  f   V P                  4        V ;P                  ^,          un        W3V P                  V P                  &   V P                  V P                  3uuRRR4       #   + '       g   i     R# ; i)z+Register resource, returning an identifier.N)rG   rI   _startrC   rD   )r   r   r   s   &&&r   r   _ResourceSharer.registerH   s[    ZZZ}}$IINI&*]DKK		"MM499- ZZZs   A)B		B	c                    ^RI Hp V w  r#V! V\        P                  ! 4       P                  R7      pVP                  V\        P                  ! 4       34       V# )z<Return connection from which to receive identified resource.Clientauthkey)
connectionrS   r   current_processrU   r   r9   getpid)identrS   addresskeycs   &    r   r    _ResourceSharer.get_connectionQ   sE     	'7G$;$;$=$E$EF	RYY[!"r   Nc                   ^RI Hp V P                  ;_uu_ 4        V P                  Ee   V! V P                  \        P
                  ! 4       P                  R7      pVP                  R4       VP                  4        V P                  P                  V4       V P                  P                  4       '       d   \        P                  ! R4       V P                  P                  4        RV n	        RV n        RV n        V P                  P!                  4        F  w  pw  rVV! 4        K  	  V P                  P#                  4        RRR4       R#   + '       g   i     R# ; i)z:Stop the background thread and clear registered resources.rR   NrT   z._ResourceSharer thread did not stop when asked)rV   rS   rG   rI   r   rW   rU   r   r   rJ   joinis_aliver   sub_warningrH   rD   itemsclear)r   timeoutrS   r\   r[   r   r   s   &&     r   r   _ResourceSharer.stopZ   s    &ZZZ}}(4==#*#:#:#<#D#DFt	!!'*<<((**$$ &; <$$&# $!%*.++*;*;*=&C$G +>!!#! ZZZs   BE8BEE	c                B   V P                   P                  4        F  w  pw  r#V! 4        K  	  V P                   P                  4        V P                  P	                  4        V P
                  e   V P
                  P                  4        R V n        R V n        R V n        R # r   )	rD   rb   rc   rG   _at_fork_reinitrH   r   rI   rJ   )r   r[   r   r   s   &   r   rL   _ResourceSharer._afterforko   st    "&++"3"3"5C$G #6

""$>>%NN  "r   c                r   ^RI Hp V P                  e   Q R4       h\        P                  ! R4       V! \
        P                  ! 4       P                  ^R7      V n        V P                  P                  V n	        \        P                  ! V P                  R7      pRVn        VP                  4        W n        R# )   )ListenerNzAlready have Listenerz0starting listener and thread for sending handles)rU   backlog)targetT)rV   rk   rH   r   debugr   rW   rU   rZ   rI   rE   Thread_servedaemonstartrJ   )r   rk   ts   &  r   rO   _ResourceSharer._startz   s    (~~%>'>>%

EF!'*A*A*C*K*KUXY..DKK0		r   c                x   \        \        R 4      '       d9   \        P                  ! \        P                  \        P                  ! 4       4         V P
                  P                  4       ;_uu_ 4       pVP                  4       pVf    RRR4       R# Vw  r4V P                  P                  V4      w  rV V! W4       V! 4         RRR4       K    T! 4        i ; i  + '       g   i     K  ; i   \        P                  ! 4       '       g+   \        P                  ! \        P                  ! 4       !    K   K  ; i)pthread_sigmaskN)hasattrsignalrv   	SIG_BLOCKvalid_signalsrH   acceptrecvrD   popr   
is_exitingsys
excepthookexc_info)r   r   msgr[   destination_pidr   r   s   &      r   rp   _ResourceSharer._serve   s    6,--""6#3#3V5I5I5KL4^^**,,))+C{ -, ,/(C"&++//#"6KD T3 -,  -,,4((NNCLLN3 )sO   "C/ 3C	C/ !C5C=CC/ 	CCC,	&C/ ,C/ /AD9)rI   rD   rC   rH   rG   rJ   r   )r(   r)   r*   r+   r,   r   r   staticmethodr    r   rL   rO   rp   r-   r.   r/   s   @r   rA   rA   =   s@     8C.  $*		4 4r   rA   )r9   rx   r"   r   rE    r   contextr   r   __all__platformobjectr   r1   rA   r   r    r   r   <module>r      s    
   
    ( <<7}G/F /  yG3 3 Y4f Y4x #$ r   