
    Sf                         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          Zne	d
gz  Z	 G d d
          Z G d d          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      J/var/www/html/env/lib/python3.11/site-packages/billiard/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    xxzzH' ' ' ' ' (00x~FFDHHHr   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>.send4   s    %dFC88888r   c                  0    t          j                    d S r   )osr   )r/   s   r   r   zDupFd.__init__.<locals>.close7   s         r   )r1   r   r   r   r   )r   fdr   r   r/   s       @r   r   zDupFd.__init__1   s]    VBZZF9 9 9 9 9! ! ! ! !'00u==DHHHr   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.detach;   s    !00:: 3d ,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 | _        g | _        t          j                    | _        d | _        d | _        d | _        t          j
        | t          j                   d S )Nr   )_key_cache
_old_locks	threadingLock_lock	_listener_address_threadr   register_after_forkr6   
_afterfork)r   s    r   r   z_ResourceSharer.__init__C   sW    	^%%
 '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.registerM   s    Z 	. 	.}$IINII&*E]DK	"M49-	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.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)
connectionrG   r   current_processrI   r   r1   getpid)identrG   addresskeycs        r   r   z_ResourceSharer.get_connectionV   sa     	'&&&&&F7G$;$=$=$EFFF	RY[[!"""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   rF   NrH   z._ResourceSharer thread did not stop when asked)rJ   rG   r=   r?   r   rK   rI   r   r   r@   joinis_aliver   sub_warningr>   r9   itemsclear)r   timeoutrG   rP   rO   r   r   s          r   r   z_ResourceSharer.stop_   s   &&&&&&Z 	$ 	$}(F4=#*#:#<#<#DF F Ft			!!'***<((** <$ &; < < <$$&&&# $!%*.+*;*;*=*=  &C$EGGGG!!###!	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   DD//D36D3c                 h   | j                                         D ]\  }\  }} |             | j                                          | j                            | j                   t          j                    | _        | j        | j        	                                 d | _        d | _
        d | _        d S r   )r9   rU   rV   r:   appendr=   r;   r<   r>   r   r?   r@   )r   rO   r   r   s       r   rB   z_ResourceSharer._afterforkt   s    "&+"3"3"5"5 	 	C$EGGGG 	tz***^%%
>%N  """r   c                 4   ddl m} | j        J t          j        d            |t          j                    j                  | _        | j        j        | _	        t          j        | j                  }d|_        |                                 || _        d S )Nr   )Listenerz0starting listener and thread for sending handlesrH   )targetT)rJ   r[   r>   r   debugr   rK   rI   rN   r?   r;   Thread_servedaemonstartr@   )r   r[   ts      r   rD   z_ResourceSharer._start   s    ((((((~%%%
EFFF!'*A*C*C*KLLL.DK000				r   c                 R   t          t          d          r7t          j        t          j        t	          d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_sigmaskr   )hasattrsignalrd   	SIG_BLOCKrangeNSIGr>   acceptrecvr9   popr   
is_exitingsys
excepthookexc_info)r   r   msgrO   destination_pidr   r   s          r   r_   z_ResourceSharer._serve   sr   6,-- 	L"6#3U1fk5J5JKKK	44^**,, 	 ))++C{	  	  	  	  	  	  	  	  ,/(C"&+//#"6"6KD% T?333	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 4(( 4NCLNN33	4sT   C/ (C# C/ "C#0C<C#CC#C/ #C''C/ *C'+C/ /4D%r   )r%   r&   r'   r(   r   r   staticmethodr   r   rB   rD   r_   r)   r   r   r6   r6   A   s        88C C C. . .   \$ $ $ $*  	 	 	4 4 4 4 4r   r6   )r1   rf   r!   rn   r;    r   r   r   __all__platformr	   r*   r6   r   r   r)   r   r   <module>rw      s?   
			   



                      ( <7}G/ / / / / / / / /$ yG3 3 3 3 3 3 3 3$]4 ]4 ]4 ]4 ]4 ]4 ]4 ]4@ #?$$ r   