ó
    F\h  ã                   óø   • 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Srg)r	   é   zPicklable wrapper for a socket.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      €Ú6/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-   ø€ Ø—x‘x“zˆHõ'ô (×0Ñ0°°x·~±~ÓFˆD�Hr   c                 óÂ   • [         R                  U R                  5       nUR                  5       n[        R
                  " U5      sSSS5        $ ! , (       d  f       g= f)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$   s<   € ä!×0Ñ0°·±Ô:¸dØŸ™Ó)�Ü×'Ò'¨Ó.÷ ;×:×:ús    &AÁ
A©r   N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r&   Ú__static_attributes__© r   r   r	   r	      s   † Ù-ò	Gõ	/r   ÚDupFdc                   ó$   • \ rS rSrSrS rS rSrg)r1   é-   z-Wrapper for fd which can be used at any time.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   ø€ Ü×%Ò% d¨F°CÕ8r   c                  ó2   >• [         R                  " T 5        g r   )Úosr   )r7   s   €r   r   ÚDupFd.__init__.<locals>.close3   s   ø€ Ü—’˜Õ r   )r:   r   r   r   r   )r   Úfdr   r   r7   s       @r   r   ÚDupFd.__init__/   s,   ø€ Ü—V’V˜B“ZˆFõ9õ!ä'×0Ñ0°Ó=ˆD�Hr   c                 ó¢   • [         R                  U R                  5       n[        R                  " U5      sSSS5        $ ! , (       d  f       g= f)z-Get the fd.  This should only be called once.N)r   r"   r   r   Úrecv_handle)r   r   s     r   r&   ÚDupFd.detach7   s0   € ä!×0Ñ0°·±Ô:¸dÜ ×,Ò,¨TÓ2÷ ;×:×:ús    A Á 
Ar(   Nr)   r0   r   r   r1   r1   -   s   † Ù;ò	>õ	3r   c                   óP   • \ rS 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é=   z.Manager for resources using background thread.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_forkrB   Ú
_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)z+Register resource, returning an identifier.Nr   )rI   rK   Ú_startrE   rF   )r   r   r   s      r   r   Ú_ResourceSharer.registerH   sW   € à�Z‹ZØ�}‰}Ñ$Ø—‘”Ø�IŠI˜‰N�IØ&* ]ˆD�K‰K˜Ÿ	™	Ñ"Ø—M‘M 4§9¡9Ð-÷ �Z�Zús   �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$ )z<Return connection from which to receive identified resource.r   ©ÚClient©Úauthkey)Ú
connectionrU   r   Úcurrent_processrW   r   r:   Úgetpid)ÚidentrU   ÚaddressÚkeyÚcs        r   r"   Ú_ResourceSharer.get_connectionQ   sE   € õ 	'Ø‰ˆÙ�7¤G×$;Ò$;Ó$=×$EÑ$EÑFˆØ	�‰�”R—Y’Y“[Ð!Ô"Øˆ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)z:Stop the background thread and clear registered resources.r   rT   NrV   z._ResourceSharer thread did not stop when asked)rX   rU   rI   rK   r   rY   rW   r   r   rL   ÚjoinÚis_aliver   Úsub_warningrJ   rF   ÚitemsÚclear)r   ÚtimeoutrU   r^   r]   r   r   s          r   r   Ú_ResourceSharer.stopZ   sç   € å&Ø�Z‹ZØ�}‰}Ò(Ù˜4Ÿ=™=Ü#*×#:Ò#:Ó#<×#DÑ#DñF�à—‘�t”Ø—‘”	Ø—‘×!Ñ! 'Ô*Ø—<‘<×(Ñ(×*Ñ*Ü×$Ò$ð &;ô <à—‘×$Ñ$Ô&Ø#�”Ø $�”Ø!%�”Ø*.¯+©+×*;Ñ*;Ö*=Ñ&�C™˜$Ù–Gñ +>à—‘×!Ñ!Ô#÷! �ZŽZús   “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   )	rF   rd   re   rI   Ú_at_fork_reinitrJ   r   rK   rL   )r   r]   r   r   s       r   rN   Ú_ResourceSharer._afterforko   st   € Ø"&§+¡+×"3Ñ"3Ö"5ÑˆC‘�$ÙŽGñ #6à�‰×ÑÔØ�
‰
×"Ñ"Ô$Ø�>‰>Ñ%Ø�N‰N× Ñ Ô"ØˆŒØˆŒØˆ�r   c                 ób  • SSK Jn  U R                  b   S5       e[        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   )ÚListenerzAlready have Listenerz0starting listener and thread for sending handlesé€   )rW   Úbacklog)ÚtargetT)rX   rl   rJ   r   Údebugr   rY   rW   r\   rK   rG   ÚThreadÚ_serveÚdaemonÚstartrL   )r   rl   Úts      r   rQ   Ú_ResourceSharer._startz   s€   € Ý(Ø�~‰~Ñ%Ð>Ð'>Ó>Ð%Ü�
Š
ÐEÔFÙ!¬'×*AÒ*AÓ*C×*KÑ*KÐUXÑYˆŒØŸ™×.Ñ.ˆŒÜ×Ò D§K¡KÑ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Úsignalrx   Ú	SIG_BLOCKÚvalid_signalsrJ   ÚacceptÚrecvrF   Úpopr   Ú
is_exitingÚsysÚ
excepthookÚexc_info)r   r   Úmsgr]   Údestination_pidr   r   s          r   rr   Ú_ResourceSharer._serve…   sÕ   € Ü”6Ð,×-Ñ-Ü×"Ò"¤6×#3Ñ#3´V×5IÒ5IÓ5KÔLØð4Ø—^‘^×*Ñ*Ô,°ØŸ)™)›+�CØ‘{Ø÷ -Ð,ð ,/Ñ(�CØ"&§+¡+§/¡/°#Ó"6‘K�Dð Ù˜TÔ3á�÷ -ñ øñ �ú÷ -Õ,ûð4Ü—’×(Ñ(Ü—N’N¤C§L¢L£NÑ3üsO   ÁC! Á*CÁ?C! Â!CÂ*CÂ2CÂ:C! Ã	CÃCÃ
CÃC! ÃC! Ã!AD%)rK   rF   rE   rJ   rI   rL   r   )r*   r+   r,   r-   r.   r   r   Ústaticmethodr"   r   rN   rQ   rr   r/   r0   r   r   rB   rB   =   s8   † Ù8òCò.ð ñó ðô$ò*	ò	õ4r   rB   )r:   rz   r$   r�   rG   Ú r   Úcontextr   r   Ú__all__ÚplatformÚobjectr	   r1   rB   r   r   r0   r   r   Ú<module>r�      s‹   ðó 
Û Û Û 
Û å Ý Ý àˆ(€ð ‡<�<�7ÓØ�ˆ}Ñ€Gô/�Fõ /ð  �ˆyÑ€Gô3�ô 3ô Y4�fô Y4ñx #Ó$Ð Ø×Ñ�r   