a XC?h �@s�ddlZddlZddlZddlZddlZddlmZddlmZddlm Z dgZ ej dkrxe dg7Z Gd d�de �Z ne d g7Z Gd d �d e �ZGd d �d e �Ze�ZejZdS)�N�)�process)� reduction)�util�stopZwin32� DupSocketc@seZdZdd�Zdd�ZdS)rcs(|����fdd�}t�|�j�|_dS)Ncs��|�}|�|�dS�N)�shareZ send_bytes)�conn�pidr �Znew_sock��D/opt/alt/python39/lib64/python3.9/multiprocessing/resource_sharer.py�sends z DupSocket.__init__..send)�dup�_resource_sharer�register�close�_id)�selfZsockrr r r�__init__s zDupSocket.__init__cCsBt�|j��"}|��}t�|�Wd�S1s40YdSr)r�get_connectionrZ recv_bytes�socketZ fromshare)rr r r r r�detach$szDupSocket.detachN��__name__� __module__� __qualname__rrr r r rrs�DupFdc@seZdZdd�Zdd�ZdS)rcs4t�|���fdd�}�fdd�}t�||�|_dS)Ncst�|�|�dSr)rZ send_handle)r r �Znew_fdr rr1szDupFd.__init__..sendcst���dSr)�osrr rr rr3szDupFd.__init__..close)r rrrr)r�fdrrr rrr/s   zDupFd.__init__cCs:t�|j��}t�|�Wd�S1s,0YdSr)rrrrZ recv_handle)rr r r rr7sz DupFd.detachNrr r r rr-sc@sJeZdZdd�Zdd�Zedd��Zddd �Zd d �Zd d �Z dd�Z dS)�_ResourceSharercCs:d|_i|_t��|_d|_d|_d|_t� |t j �dS)Nr) �_key�_cache� threadingZLock�_lock� _listener�_address�_threadrZregister_after_forkr"� _afterfork)rr r rr?s z_ResourceSharer.__init__cCsf|j�L|jdur|��|jd7_||f|j|j<|j|jfWd�S1sX0YdS)Nr)r&r(�_startr#r$)rrrr r rrHs  z_ResourceSharer.registercCs<ddlm}|\}}||t��jd�}|�|t��f�|S)Nr��Client��authkey)� connectionr-r�current_processr/rr �getpid)Zidentr-�address�key�cr r rrQs  z_ResourceSharer.get_connectionNcCs�ddlm}|j��|jdur�||jt��jd�}|�d�|��|j � |�|j � �rdt � d�|j��d|_ d|_d|_|j��D]\}\}}|�q�|j��Wd�n1s�0YdS)Nrr,r.z._ResourceSharer thread did not stop when asked)r0r-r&r(rr1r/rrr)�joinZis_aliverZ sub_warningr'r$�items�clear)rZtimeoutr-r5r4rrr r rrZs$  �     z_ResourceSharer.stopcCs\|j��D]\}\}}|�q |j��|j��|jdurF|j��d|_d|_d|_dSr) r$r7r8r&�_at_fork_reinitr'rr(r))rr4rrr r rr*os    z_ResourceSharer._afterforkcCsXddlm}t�d�|t��jd�|_|jj|_ t j |j d�}d|_ |��||_dS)Nr)�Listenerz0starting listener and thread for sending handlesr.)�targetT)r0r:r�debugrr1r/r'r3r(r%ZThread�_serveZdaemon�startr))rr:�tr r rr+zs   z_ResourceSharer._startcCs�ttd�rt�tjt���z�|j���f}|��}|durJWd�Wq�|\}}|j� |�\}}z|||�W|�n|�0Wd�n1s�0YWqt � �s�t j t ���Yq0qdS)N�pthread_sigmask)�hasattr�signalr@� SIG_BLOCK� valid_signalsr'ZacceptZrecvr$�poprZ is_exiting�sys� excepthook�exc_info)rr �msgr4Zdestination_pidrrr r rr=�s   2z_ResourceSharer._serve)N) rrrrr� staticmethodrrr*r+r=r r r rr"=s      r")r rBrrFr%�r�contextrr�__all__�platform�objectrrr"rrr r r r� s       \