U ,a@sddlZddlZddlZddlZddlZddlmZddlmZddlm Z dgZ ej dkrxe dg7Z Gd dde Z ne d g7Z Gd d d e ZGd d d e ZeZejZdS)N)process) reduction)utilstopZwin32 DupSocketc@seZdZddZddZdS)rcs(|fdd}t|j|_dS)Ncs|}||dSN)shareZ send_bytes)connpidr Znew_sockD/opt/alt/python38/lib64/python3.8/multiprocessing/resource_sharer.pysends z DupSocket.__init__..send)dup_resource_sharerregisterclose_id)selfZsockrr r r__init__s zDupSocket.__init__c Cs6t|j }|}t|W5QRSQRXdSr)rget_connectionrZ recv_bytessocketZ fromshare)rr r r r rdetach$szDupSocket.detachN__name__ __module__ __qualname__rrr r r rrsDupFdc@seZdZddZddZdS)rcs4t|fdd}fdd}t|||_dS)Ncst||dSr)rZ send_handle)r r Znew_fdr rr1szDupFd.__init__..sendcstdSr)osrr rr rr3szDupFd.__init__..close)r rrrr)rfdrrr rrr/s   zDupFd.__init__c Cs.t|j}t|W5QRSQRXdSr)rrrrZ recv_handle)rr r r rr7sz DupFd.detachNrr r r rr-sc@sJeZdZddZddZeddZddd Zd d Zd d Z ddZ dS)_ResourceSharercCs@d|_i|_g|_t|_d|_d|_d|_t |t j dS)Nr) _key_cache _old_locks threadingLock_lock _listener_address_threadrZregister_after_forkr" _afterfork)rr r rr?s z_ResourceSharer.__init__c CsZ|jJ|jdkr||jd7_||f|j|j<|j|jfW5QRSQRXdS)Nr)r(r*_startr#r$)rrrr r rrIs  z_ResourceSharer.registercCs<ddlm}|\}}||tjd}||tf|S)NrClientauthkey) connectionr/rcurrent_processr1rr getpid)Zidentr/addresskeycr r rrRs  z_ResourceSharer.get_connectionNc Csddlm}|j|jdk r||jtjd}|d||j ||j rdt d|jd|_ d|_d|_|jD]\}\}}|q|jW5QRXdS)Nrr.r0z._ResourceSharer thread did not stop when asked)r2r/r(r*rr3r1rrr+joinZis_aliverZ sub_warningr)r$itemsclear)rZtimeoutr/r7r6rrr r rr[s$       z_ResourceSharer.stopcCsj|jD]\}\}}|q |j|j|jt|_|jdk rT|j d|_d|_ d|_ dSr) r$r9r:r%appendr(r&r'r)rr*r+)rr6rrr r rr,ps    z_ResourceSharer._afterforkcCsXddlm}td|tjd|_|jj|_ t j |j d}d|_ |||_dS)Nr)Listenerz0starting listener and thread for sending handlesr0)targetT)r2r<rdebugrr3r1r)r5r*r&ZThread_serveZdaemonstartr+)rr<tr r rr-~s   z_ResourceSharer._startc Csttdrttjtzh|jT}|}|dkrHW5QRWq|\}}|j |\}}z|||W5|XW5QRXWqt st j t YqXqdS)Npthread_sigmask)hasattrsignalrB SIG_BLOCK valid_signalsr)ZacceptZrecvr$poprZ is_exitingsys excepthookexc_info)rr msgr6Zdestination_pidrrr r rr?s  z_ResourceSharer._serve)N) rrrrr staticmethodrrr,r-r?r r r rr"=s     r")r rDrrHr&rcontextrr__all__platformobjectrrr"rrr r r r s       `