+
    i  c                   s   ^ 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stopZwin32	DupSocketc                   s0   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                s~   a VP                  4       oV3R  lp\        P                  VSP                  4      V n        R# )c                 sL   < SP                  V4      pV P                  V4       R # N)shareZ
send_bytes)connpidr   new_socks   && 8/usr/lib64/python3.14/multiprocessing/resource_sharer.pysendZ DupSocket.__init__.<locals>.send   s     s+&    N)dup_resource_sharerregisterclose_id)selfZsockr   r
   s   && @r   __init__ZDupSocket.__init__   s-    xxzH' (00x~~FDHr   c                s    \         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   Z
recv_bytessocketZ	fromshare)r   r   r      &  r   detachZDupSocket.detach$   sB    !00::d)''. ;:::s   &AA*	r   N	__name__
__module____qualname____firstlineno____doc__r   r   __static_attributes____classdictcell__Z__classdict__   @r   r   r      s     -	G	/ 	/r   DupFdc                   s0   a  ] tR t^-t o RtR tR tRtV tR# )r$   z-Wrapper for fd which can be used at any time.c                s   a \         P                  ! V4      oV3R  lpV3R lp\        P                  W#4      V n        R# )c                 s8   < \         P                  ! V SV4       R # r   )r   Zsend_handle)r   r	   new_fds   &&r   r   ZDupFd.__init__.<locals>.send1   s    %%dFC8r   c                  s4   < \         P                  ! S 4       R # r   )osr   )r%   s   r   r   ZDupFd.__init__.<locals>.close3   s     r   N)r&   r   r   r   r   )r   Zfdr   r   r%   s   &&  @r   r   ZDupFd.__init__/   s,    VVBZF9!'00=DHr   c                s    \         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   Zrecv_handle)r   r   s   & r   r   ZDupFd.detach7   s6    !00::d ,,T2 ;:::s   A		A	r   Nr   r"   r#   r   r$   r$   -   s     ;	>	3 	3r   c                   s\   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                s    ^ 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	threadingZLock_lock	_listener_address_threadr   Zregister_after_forkr'   
_afterfork)r   s   &r   r   Z_ResourceSharer.__init__?   sI    	^^%
  'A'ABr   c                s:   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)r+   r-   _startr(   r)   )r   r   r   s   &&&r   r   Z_ResourceSharer.registerH   s[    ZZZ}}$IINI&*]DKK		"MM499- ZZZs   A)B		B	c                s    ^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)
connectionr2   r   current_processr4   r   r&   Zgetpid)Zidentr2   addresskeycs   &    r   r   Z_ResourceSharer.get_connectionQ   sE     	'7G$;$;$=$E$EF	RYY[!"r   Nc                s   ^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.r1   Nr3   z._ResourceSharer thread did not stop when asked)r5   r2   r+   r-   r   r6   r4   r   r   r.   ZjoinZis_aliver   Zsub_warningr,   r)   itemsclear)r   Ztimeoutr2   r9   r8   r   r   s   &&     r   r   Z_ResourceSharer.stopZ   s    &ZZZ}}(4==#*#:#:#<#D#DFt	!!'*<<((**$$ &; <$$&# $!%*.++*;*;*=&C$G +>!!#! ZZZs   BE8BEE	c                sB   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   )	r)   r:   r;   r+   Z_at_fork_reinitr,   r   r-   r.   )r   r8   r   r   s   &   r   r/   Z_ResourceSharer._afterforko   st    "&++"3"3"5C$G #6

""$>>%NN  "r   c                sH   ^RI Hp \        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# )i   )Listenerz0starting listener and thread for sending handles)r4   Zbacklog)ZtargetTN)r5   r<   r   Zdebugr   r6   r4   r,   r7   r-   r*   ZThread_serveZdaemonZstartr.   )r   r<   Ztr   r   r0   Z_ResourceSharer._startz   sj    (

EF!'*A*A*C*K*KUXY..DKK0		r   c                sx   \        \        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)Zhasattrsignalr>   Z	SIG_BLOCKZvalid_signalsr,   ZacceptZrecvr)   Zpopr   Z
is_exitingsysZ
excepthookZexc_info)r   r   Zmsgr8   Zdestination_pidr   r   s   &      r   r=   Z_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)r-   r)   r(   r,   r+   r.   r   )r   r   r   r   r   r   r   Zstaticmethodr   r   r/   r0   r=   r    r!   r"   r#   r   r'   r'   =   s@     8C.  $*		4 4r   r'   )r&   r?   r   r@   r*   Z r   Zcontextr   r   Z__all__ZplatformZobjectr   r$   r'   r   r   ) r   r   <module>rA      s    
   
    ( <<7}G/F /  yG3 3 Y4f Y4x #$ r   