<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

]                 @   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 r e	 d g 7Z	 Gd	 d   d e  Z n# e	 d
 g 7Z	 Gd d
   d
 e  Z Gd d   d e  Z e   Z e j Z d S)    N   )process)	reduction)utilstopwin32	DupSocketc               @   s(   e  Z d  Z d d   Z d d   Z d S)r   c                s:   | j        f d d   } t j |   j  |  _ d  S)Nc                s      j  |  } |  j |  d  S)N)share
send_bytes)connpidr	   )new_sock 4/opt/alt/python35/lib64/python3.5/resource_sharer.pysend   s    z DupSocket.__init__.<locals>.send)dup_resource_sharerregisterclose_id)selfsockr   r   )r   r   __init__   s    zDupSocket.__init__c          	   C   s9   t  j |  j    } | j   } t j |  SWd  QRXd  S)N)r   get_connectionr   
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                sL   t  j |      f d d   }   f d d   } t j | |  |  _ d  S)Nc                s   t  j |    |  d  S)N)r   send_handle)r   r   )new_fdr   r   r   1   s    zDupFd.__init__.<locals>.sendc                  s   t  j    d  S)N)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 |  j   } t j |  SWd  QRXd  S)N)r   r   r   r   recv_handle)r   r   r   r   r   r   7   s    zDupFd.detachN)r   r   r   r   r   r   r   r   r   r    -   s   c               @   sm   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 j   |  _ d  |  _ d  |  _ d  |  _ t	 j
 |  t j  d  S)Nr   )_key_cache
_old_locks	threadingLock_lock	_listener_address_threadr   register_after_forkr&   
_afterfork)r   r   r   r   r   ?   s    						z_ResourceSharer.__init__c          
   C   sc   |  j  S |  j d  k r# |  j   |  j d 7_ | | f |  j |  j <|  j |  j f SWd  QRXd  S)Nr   )r,   r.   _startr'   r(   )r   r   r   r   r   r   r   I   s    

z_ResourceSharer.registerc             C   sT   d d l  m } |  \ } } | | d t j   j } | j | t j   f  | S)Nr   )Clientauthkey)
connectionr3   r   current_processr4   r   r#   getpid)identr3   addresskeycr   r   r   r   R   s
    z_ResourceSharer.get_connectionNc             C   s   d d l  m } |  j  |  j d  k	 r | |  j d t j   j } | j d   | j   |  j	 j
 |  |  j	 j   r t j d  |  j j   d  |  _	 d  |  _ d  |  _ x* |  j j   D] \ } \ } } |   q W|  j j   Wd  QRXd  S)Nr   )r3   r4   z._ResourceSharer thread did not stop when asked)r5   r3   r,   r.   r   r6   r4   r   r   r/   joinis_aliver   sub_warningr-   r(   itemsclear)r   timeoutr3   r;   r:   r   r   r   r   r   r   [   s"    

			"z_ResourceSharer.stopc             C   s   x* |  j  j   D] \ } \ } } |   q W|  j  j   |  j j |  j  t j   |  _ |  j d  k	 rx |  j j	   d  |  _ d  |  _
 d  |  _ d  S)N)r(   r?   r@   r)   appendr,   r*   r+   r-   r   r.   r/   )r   r:   r   r   r   r   r   r1   p   s    "		z_ResourceSharer._afterforkc             C   s|   d d l  m } t j d  | d t j   j  |  _ |  j j |  _	 t
 j d |  j  } d | _ | j   | |  _ d  S)Nr   )Listenerz0starting listener and thread for sending handlesr4   targetT)r5   rC   r   debugr   r6   r4   r-   r9   r.   r*   Thread_servedaemonstartr/   )r   rC   tr   r   r   r2   ~   s    	
z_ResourceSharer._startc             C   s   t  t d  r. t j t j t d t j   x yv |  j j   ` } | j   } | d  k r_ P| \ } } |  j	 j
 |  \ } } z | | |  Wd  |   XWd  QRXWq1 t j   s t j t j     Yq1 Xq1 Wd  S)Npthread_sigmaskr   )hasattrsignalrK   	SIG_BLOCKrangeNSIGr-   acceptrecvr(   popr   
is_exitingsys
excepthookexc_info)r   r   msgr:   destination_pidr   r   r   r   r   rG      s     z_ResourceSharer._serve)r   r   r   r   r   staticmethodr   r   r1   r2   rG   r   r   r   r   r&   =   s   
		r&   )r#   rM   r   rU   r*    r   r   r   __all__platformobjectr   r    r&   r   r   r   r   r   r   <module>   s    	`	