§
    *‚Kg  ã                   óþ   — 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dS )é    Né   )Úprocess)Ú	reduction)ÚutilÚstopÚwin32Ú	DupSocketc                   ó   — e Zd ZdZd„ Zd„ ZdS )r	   zPicklable wrapper for a socket.c                 ó„   ‡— |                      ¦   «         Šˆfd„}t                               |‰j        ¦  «        | _        d S )Nc                 ó\   •— ‰                      |¦  «        }|                      |¦  «         d S ©N)ÚshareÚ
send_bytes)ÚconnÚpidr   Únew_socks      €ú6/usr/lib/python3.11/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__   sH   ø€ Ø—x’x‘z”zˆHð'ð 'ð 'ð 'ð 'õ (×0Ò0°°x´~ÑFÔFˆDŒHˆHˆHr   c                 óÄ   — t                                | j        ¦  «        5 }|                     ¦   «         }t	          j        |¦  «        cddd¦  «         S # 1 swxY w Y   dS )z1Get the socket.  This should only be called once.N)r   Úget_connectionr   Ú
recv_bytesÚsocketÚ	fromshare)r   r   r   s      r   ÚdetachzDupSocket.detach$   s–   € å!×0Ò0°´Ñ:Ô:ð /¸dØŸšÑ)Ô)�ÝÔ'¨Ñ.Ô.ð/ð /ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /ð /ð /s    (AÁAÁAN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r#   © r   r   r	   r	      s;   € € € € € Ø-Ð-ð	Gð 	Gð 	Gð	/ð 	/ð 	/ð 	/ð 	/r   ÚDupFdc                   ó   — e Zd ZdZd„ Zd„ ZdS )r*   z-Wrapper for fd which can be used at any time.c                 ó„   ‡— t          j        |¦  «        Šˆfd„}ˆfd„}t                               ||¦  «        | _        d S )Nc                 ó4   •— t          j        | ‰|¦  «         d S r   )r   Úsend_handle)r   r   Únew_fds     €r   r   zDupFd.__init__.<locals>.send1   s   ø€ ÝÔ% d¨F°CÑ8Ô8Ð8Ð8Ð8r   c                  ó0   •— t          j        ‰ ¦  «         d S r   )Úosr   )r/   s   €r   r   zDupFd.__init__.<locals>.close3   s   ø€ Ý”˜Ñ Ô Ð Ð Ð r   )r1   r   r   r   r   )r   Úfdr   r   r/   s       @r   r   zDupFd.__init__/   s]   ø€ Ý”V˜B‘Z”ZˆFð9ð 9ð 9ð 9ð 9ð!ð !ð !ð !ð !å'×0Ò0°°uÑ=Ô=ˆDŒHˆHˆHr   c                 óœ   — t                                | j        ¦  «        5 }t          j        |¦  «        cddd¦  «         S # 1 swxY w Y   dS )z-Get the fd.  This should only be called once.N)r   r   r   r   Úrecv_handle)r   r   s     r   r#   zDupFd.detach7   s‡   € å!×0Ò0°´Ñ:Ô:ð 3¸dÝ Ô,¨TÑ2Ô2ð3ð 3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3ð 3ð 3s    AÁAÁANr$   r)   r   r   r*   r*   -   s8   € € € € € Ø;Ð;ð	>ð 	>ð 	>ð	3ð 	3ð 	3ð 	3ð 	3r   c                   óN   — e Zd ZdZd„ Zd„ Zed„ ¦   «         Zd
d„Zd„ Z	d„ Z
d	„ ZdS )Ú_ResourceSharerz.Manager for resources using background thread.c                 óº   — d| _         i | _        t          j        ¦   «         | _        d | _        d | _        d | _        t          j	        | t          j        ¦  «         d S )Nr   )Ú_keyÚ_cacheÚ	threadingÚLockÚ_lockÚ	_listenerÚ_addressÚ_threadr   Úregister_after_forkr6   Ú
_afterfork)r   s    r   r   z_ResourceSharer.__init__?   sP   € ØˆŒ	ØˆŒÝ”^Ñ%Ô%ˆŒ
ØˆŒØˆŒØˆŒÝÔ  ¥Ô'AÑBÔBÐBÐBÐBr   c                 óØ   — | j         5  | j        €|                      ¦   «          | xj        dz  c_        ||f| j        | j        <   | j        | j        fcddd¦  «         S # 1 swxY w Y   dS )z+Register resource, returning an identifier.Nr   )r<   r>   Ú_startr8   r9   )r   r   r   s      r   r   z_ResourceSharer.registerH   s°   € àŒZð 	.ð 	.ØŒ}Ð$Ø—’‘”�ØˆIŒI˜‰NˆIŒIØ&*¨E ]ˆDŒK˜œ	Ñ"Ø”M 4¤9Ð-ð	.ð 	.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.ð 	.ð 	.s   ˆA
AÁA#Á&A#c                 ó²   — ddl m} | \  }} ||t          j        ¦   «         j        ¬¦  «        }|                     |t          j        ¦   «         f¦  «         |S )z<Return connection from which to receive identified resource.r   ©ÚClient©Úauthkey)Ú
connectionrF   r   Úcurrent_processrH   r   r1   Úgetpid)ÚidentrF   ÚaddressÚkeyÚcs        r   r   z_ResourceSharer.get_connectionQ   sa   € ð 	'Ð&Ð&Ð&Ð&Ð&Ø‰ˆ�ØˆF�7¥GÔ$;Ñ$=Ô$=Ô$EÐFÑFÔFˆØ	�Š�•R”Y‘[”[Ð!Ñ"Ô"Ð"Øˆr   Nc                 óx  — ddl m} | j        5  | j        �� || j        t	          j        ¦   «         j        ¬¦  «        }|                     d¦  «         |                     ¦   «          | j	         
                    |¦  «         | j	                             ¦   «         rt          j        d¦  «         | j                             ¦   «          d| _	        d| _        d| _        | j                             ¦   «         D ]\  }\  }} |¦   «          Œ| j                             ¦   «          ddd¦  «         dS # 1 swxY w Y   dS )z:Stop the background thread and clear registered resources.r   rE   NrG   z._ResourceSharer thread did not stop when asked)rI   rF   r<   r>   r   rJ   rH   r   r   r?   ÚjoinÚis_aliver   Úsub_warningr=   r9   ÚitemsÚclear)r   ÚtimeoutrF   rO   rN   r   r   s          r   r   z_ResourceSharer.stopZ   s†  € à&Ð&Ð&Ð&Ð&Ð&ØŒZð 	$ð 	$ØŒ}Ñ(Ø�F˜4œ=Ý#*Ô#:Ñ#<Ô#<Ô#DðFñ Fô F�à—’�t‘”�Ø—’‘	”	�	Ø”×!Ò! 'Ñ*Ô*Ð*Ø”<×(Ò(Ñ*Ô*ð <ÝÔ$ð &;ñ <ô <ð <à”×$Ò$Ñ&Ô&Ð&Ø#�”Ø $�”Ø!%�”Ø*.¬+×*;Ò*;Ñ*=Ô*=ð ð Ñ&�C™˜$ Ø�E‘G”G�G�GØ”×!Ò!Ñ#Ô#Ð#ð!	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$ð 	$ð 	$s   ŽDD/Ä/D3Ä6D3c                 ó,  — | j                              ¦   «         D ]\  }\  }} |¦   «          Œ| j                              ¦   «          | j                             ¦   «          | j        �| j                             ¦   «          d | _        d | _        d | _        d S r   )	r9   rT   rU   r<   Ú_at_fork_reinitr=   r   r>   r?   )r   rN   r   r   s       r   rA   z_ResourceSharer._afterforko   s’   € Ø"&¤+×"3Ò"3Ñ"5Ô"5ð 	ð 	ÑˆC‘�$˜ØˆE‰GŒGˆGˆGØŒ×ÒÑÔÐØŒ
×"Ò"Ñ$Ô$Ð$ØŒ>Ð%ØŒN× Ò Ñ"Ô"Ð"ØˆŒØˆŒØˆŒˆˆr   c                 óD  — ddl m} | j        �
J d¦   «         ‚t          j        d¦  «          |t          j        ¦   «         j        ¬¦  «        | _        | j        j        | _	        t          j        | j        ¬¦  «        }d|_        |                     ¦   «          || _        d S )Nr   )ÚListenerzAlready have Listenerz0starting listener and thread for sending handlesrG   )ÚtargetT)rI   rZ   r=   r   Údebugr   rJ   rH   rM   r>   r:   ÚThreadÚ_serveÚdaemonÚstartr?   )r   rZ   Úts      r   rC   z_ResourceSharer._startz   sœ   € Ø(Ð(Ð(Ð(Ð(Ð(ØŒ~Ð%Ð%Ð'>Ñ%Ô%Ð%ÝŒ
ÐEÑFÔFÐFØ!˜­'Ô*AÑ*CÔ*CÔ*KÐLÑLÔLˆŒØœÔ.ˆŒÝÔ D¤KÐ0Ñ0Ô0ˆØˆŒØ	�Š‰	Œ	ˆ	ØˆŒˆˆr   c                 óD  — t          t          d¦  «        r0t          j        t          j        t          j        ¦   «         ¦  «         	 	 | j                             ¦   «         5 }|                     ¦   «         }|€	 d d d ¦  «         d S |\  }}| j         	                    |¦  «        \  }}	  |||¦  «          |¦   «          n#  |¦   «          w xY w	 d d d ¦  «         n# 1 swxY w Y   n9#  t          j        ¦   «         st          j        t          j        ¦   «         Ž  Y nxY wŒÛ)NÚpthread_sigmask)ÚhasattrÚsignalrc   Ú	SIG_BLOCKÚvalid_signalsr=   ÚacceptÚrecvr9   Úpopr   Ú
is_exitingÚsysÚ
excepthookÚexc_info)r   r   ÚmsgrN   Údestination_pidr   r   s          r   r^   z_ResourceSharer._serve…   so  € Ý•6Ð,Ñ-Ô-ð 	MÝÔ"¥6Ô#3µVÔ5IÑ5KÔ5KÑLÔLÐLð	4ð4Ø”^×*Ò*Ñ,Ô,ð 	 °ØŸ)š)™+œ+�CØ�{Øð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð ,/Ñ(�C˜Ø"&¤+§/¢/°#Ñ"6Ô"6‘K�D˜%ð Ø˜˜T ?Ñ3Ô3Ð3à˜™œ˜˜ø˜˜™œ˜˜øøø˜ð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 øøð4Ý”Ñ(Ô(ð 4Ý”N¥C¤L¡N¤NÐ3Ð3øøøøøð	4sT   ÁC( Á!CÁ9C( Â"CÂ)C Â5CÃ CÃCÃC( ÃC Ã C( Ã#C Ã$C( Ã(4Dr   )r%   r&   r'   r(   r   r   Ústaticmethodr   r   rA   rC   r^   r)   r   r   r6   r6   =   s—   € € € € € Ø8Ð8ðCð Cð Cð.ð .ð .ð ðð ñ „\ðð$ð $ð $ð $ð*	ð 	ð 	ð	ð 	ð 	ð4ð 4ð 4ð 4ð 4r   r6   )r1   re   r!   rl   r:   Ú r   Úcontextr   r   Ú__all__ÚplatformÚobjectr	   r*   r6   r   r   r)   r   r   ú<module>rw      sE  ðð 
€	€	€	Ø €€€Ø €€€Ø 
€
€
€
Ø Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð àˆ(€ð „<�7ÒÐØ�ˆ}Ñ€Gð/ð /ð /ð /ð /�Fñ /ô /ð /ð /ð  �ˆyÑ€Gð3ð 3ð 3ð 3ð 3�ñ 3ô 3ð 3ð Y4ð Y4ð Y4ð Y4ð Y4�fñ Y4ô Y4ð Y4ðx #�?Ñ$Ô$Ð ØÔ€€€r   