£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
U
    e5d                     @   s   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rxe
dg7 Z
G d	d deZne
d
g7 Z
G dd
 d
eZG dd deZe ZejZdS )    N   )process)	reduction)utilstopZwin32	DupSocketc                   @   s   e Zd Zdd Zdd ZdS )r   c                    s(   |    fdd}t| j| _d S )Nc                    s     |}| | d S N)shareZ
send_bytes)connpidr	   Znew_sock 7/usr/lib64/python3.8/multiprocessing/resource_sharer.pysend   s    
z DupSocket.__init__.<locals>.send)dup_resource_sharerregisterclose_id)selfZsockr   r   r   r   __init__   s    zDupSocket.__init__c              
   C   s6   t | j }| }t|W  5 Q R  S Q R X d S r   )r   get_connectionr   Z
recv_bytessocketZ	fromshare)r   r
   r	   r   r   r   detach$   s    zDupSocket.detachN__name__
__module____qualname__r   r   r   r   r   r   r      s   DupFdc                   @   s   e Zd Zdd Zdd ZdS )r   c                    s4   t |  fdd} fdd}t||| _d S )Nc                    s   t |  | d S r   )r   Zsend_handle)r
   r   Znew_fdr   r   r   1   s    zDupFd.__init__.<locals>.sendc                      s   t   d S r   )osr   r   r   r   r   r   3   s    zDupFd.__init__.<locals>.close)r    r   r   r   r   )r   fdr   r   r   r   r   r   /   s    
zDupFd.__init__c              
   C   s.   t | j}t|W  5 Q R  S Q R X d S r   )r   r   r   r   Zrecv_handle)r   r
   r   r   r   r   7   s    zDupFd.detachNr   r   r   r   r   r   -   s   c                   @   sJ   e Zd Zdd Zdd Zedd Zddd	Zd
d Zdd Z	dd Z
dS )_ResourceSharerc                 C   s@   d| _ i | _g | _t | _d | _d | _d | _t	
| tj d S )Nr   )_key_cache
_old_locks	threadingLock_lock	_listener_address_threadr   Zregister_after_forkr"   
_afterfork)r   r   r   r   r   ?   s    
z_ResourceSharer.__init__c              
   C   sZ   | j J | jd kr|   |  jd7  _||f| j| j< | j| jfW  5 Q R  S Q R X d S )Nr   )r(   r*   _startr#   r$   )r   r   r   r   r   r   r   I   s    
z_ResourceSharer.registerc                 C   s<   ddl m} | \}}||t jd}||t f |S )Nr   Clientauthkey)
connectionr/   r   current_processr1   r   r    getpid)Zidentr/   addresskeycr   r   r   r   R   s
    z_ResourceSharer.get_connectionNc              	   C   s   ddl m} | j | jd k	r|| jt jd}|d  |  | j	
| | j	 rdtd | j  d | _	d | _d | _| j D ]\}\}}|  q| j  W 5 Q R X d S )Nr   r.   r0   z._ResourceSharer thread did not stop when asked)r2   r/   r(   r*   r   r3   r1   r   r   r+   joinZis_aliver   Zsub_warningr)   r$   itemsclear)r   Ztimeoutr/   r7   r6   r   r   r   r   r   r   [   s$    




z_ResourceSharer.stopc                 C   sj   | j  D ]\}\}}|  q
| j   | j| j t | _| jd k	rT| j	  d | _d | _
d | _d S r   )r$   r9   r:   r%   appendr(   r&   r'   r)   r   r*   r+   )r   r6   r   r   r   r   r   r,   p   s    



z_ResourceSharer._afterforkc                 C   sX   ddl m} td |t jd| _| jj| _	t
j| jd}d|_|  || _d S )Nr   )Listenerz0starting listener and thread for sending handlesr0   )targetT)r2   r<   r   debugr   r3   r1   r)   r5   r*   r&   ZThread_serveZdaemonstartr+   )r   r<   tr   r   r   r-   ~   s    

z_ResourceSharer._startc              	   C   s   t tdrttjt  zh| j T}| }|d krHW 5 Q R  W q|\}}| j	|\}}z||| W 5 |  X W 5 Q R X W q   t
 stjt   Y qX qd S )Npthread_sigmask)hasattrsignalrB   	SIG_BLOCKvalid_signalsr)   ZacceptZrecvr$   popr   Z
is_exitingsys
excepthookexc_info)r   r
   msgr6   Zdestination_pidr   r   r   r   r   r?      s    
z_ResourceSharer._serve)N)r   r   r   r   r   staticmethodr   r   r,   r-   r?   r   r   r   r   r"   =   s   
	

r"   )r    rD   r   rH   r&    r   contextr   r   __all__platformobjectr   r   r"   r   r   r   r   r   r   <module>   s    


`