a DOg @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/python39/lib64/python3.9/multiprocessing/resource_sharer.pysends z DupSocket.__init__..send)dup_resource_sharerregisterclose_id)selfZsockrr r r__init__s zDupSocket.__init__cCsBt|j"}|}t|WdS1s40YdSr)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__cCs:t|j}t|WdS1s,0YdSr)rrrrZ recv_handle)rr r r rr7sz DupFd.detachNrr r r rr-sc@sJeZdZddZddZeddZddd Zd d Zd d Z ddZ 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|jL|jdur||jd7_||f|j|j<|j|jfWdS1sX0YdS)Nr)r&r(_startr#r$)rrrr r rrHs  z_ResourceSharer.registercCs<ddlm}|\}}||tjd}||tf|S)NrClientauthkey) connectionr-rcurrent_processr/rr getpid)Zidentr-addresskeycr r rrQs  z_ResourceSharer.get_connectionNcCsddlm}|j|jdur||jtjd}|d||j ||j rdt d|jd|_ d|_d|_|jD]\}\}}|q|jWdn1s0YdS)Nrr,r.z._ResourceSharer thread did not stop when asked)r0r-r&r(rr1r/rrr)joinZis_aliverZ sub_warningr'r$itemsclear)rZtimeoutr-r5r4rrr r rrZs$       z_ResourceSharer.stopcCs\|jD]\}\}}|q |j|j|jdurF|jd|_d|_d|_dSr) r$r7r8r&_at_fork_reinitr'rr(r))rr4rrr r rr*os    z_ResourceSharer._afterforkcCsXddlm}td|tjd|_|jj|_ t j |j d}d|_ |||_dS)Nr)Listenerz0starting listener and thread for sending handlesr.)targetT)r0r:rdebugrr1r/r'r3r(r%ZThread_serveZdaemonstartr))rr:tr r rr+zs   z_ResourceSharer._startcCsttdrttjtz|jf}|}|durJWdWq|\}}|j |\}}z|||W|n|0Wdn1s0YWqt st j t Yq0qdS)Npthread_sigmask)hasattrsignalr@ SIG_BLOCK valid_signalsr'ZacceptZrecvr$poprZ is_exitingsys excepthookexc_info)rr msgr4Zdestination_pidrrr r rr=s   2z_ResourceSharer._serve)N) rrrrr staticmethodrrr*r+r=r r r rr"=s      r")r rBrrFr%rcontextrr__all__platformobjectrrr"rrr r r r s       \