3 \Íã@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(|jƒ‰‡fdd„}tj|ˆjƒ|_dS)Ncsˆj|ƒ}|j|ƒdS)N)ÚshareZ send_bytes)ÚconnÚpidr)Únew_sock©ú7/usr/lib64/python3.6/multiprocessing/resource_sharer.pyÚsends z DupSocket.__init__..send)ÚdupÚ_resource_sharerÚregisterÚcloseÚ_id)ÚselfZsockrr )r r Ú__init__s zDupSocket.__init__c Cs*tj|jƒ�}|jƒ}tj|ƒSQRXdS)N)rÚget_connectionrZ recv_bytesÚsocketZ fromshare)rr rr r r Údetach$szDupSocket.detachN)Ú__name__Ú __module__Ú __qualname__rrr r r r rsÚDupFdc@seZdZdd„Zdd„ZdS)rcs4tj|ƒ‰‡fdd„}‡fdd„}tj||ƒ|_dS)Ncstj|ˆ|ƒdS)N)rZ send_handle)r r )Únew_fdr r r1szDupFd.__init__..sendcstjˆƒdS)N)Úosrr )rr r r3szDupFd.__init__..close)rrrrr)rÚfdrrr )rr r/s   zDupFd.__init__c Cs"tj|jƒ� }tj|ƒSQRXdS)N)rrrrZ recv_handle)rr r r r r7sz DupFd.detachN)rrrrrr r r r r-sc@sJeZdZdd„Zdd„Zedd„ƒZddd „Zd d „Zd d „Z dd„Z dS)Ú_ResourceSharercCs@d|_i|_g|_tjƒ|_d|_d|_d|_t j |t j ƒdS)Nr) Ú_keyÚ_cacheÚ _old_locksÚ threadingÚLockÚ_lockÚ _listenerÚ_addressÚ_threadrZregister_after_forkr Ú _afterfork)rr r r r?s z_ResourceSharer.__init__c CsN|j�>|jdkr|jƒ|jd7_||f|j|j<|j|jfSQRXdS)Nr)r&r(Ú_startr!r")rrrr r r rIs  z_ResourceSharer.registercCs<ddlm}|\}}||tjƒjd�}|j|tjƒfƒ|S)Nr)ÚClient)Úauthkey)Ú connectionr,rÚcurrent_processr-rrÚgetpid)Zidentr,ÚaddressÚkeyÚcr r r rRs  z_ResourceSharer.get_connectionNc Csºddlm}|j�ž|jdk r¬||jtjƒjd�}|jdƒ|jƒ|j j |ƒ|j j ƒrdt j dƒ|jjƒd|_ d|_d|_x |jjƒD]\}\}}|ƒqŒW|jjƒWdQRXdS)Nr)r,)r-z._ResourceSharer thread did not stop when asked)r.r,r&r(rr/r-rrr)ÚjoinZis_aliverZ sub_warningr'r"ÚitemsÚclear)rZtimeoutr,r3r2rrr r r r[s"        z_ResourceSharer.stopcCsnx |jjƒD]\}\}}|ƒq W|jjƒ|jj|jƒtjƒ|_|jdk rX|jj ƒd|_d|_ d|_ dS)N) r"r5r6r#Úappendr&r$r%r'rr(r))rr2rrr r r r*ps     z_ResourceSharer._afterforkcCsXddlm}tjdƒ|tjƒjd�|_|jj|_ t j |j d�}d|_ |jƒ||_dS)Nr)ÚListenerz0starting listener and thread for sending handles)r-)ÚtargetT)r.r8rÚdebugrr/r-r'r1r(r$ZThreadÚ_serveZdaemonÚstartr))rr8Útr r r r+~s   z_ResourceSharer._startcCsªttdƒr tjtjtdtjƒƒx„y\|jjƒ�H}|jƒ}|dkrBP|\}}|j j |ƒ\}}z|||ƒWd|ƒXWdQRXWq"t j ƒsœt jt jƒŽYq"Xq"WdS)NÚpthread_sigmaskr)ÚhasattrÚsignalr>Ú SIG_BLOCKÚrangeÚNSIGr'ZacceptZrecvr"ÚpoprZ is_exitingÚsysÚ excepthookÚexc_info)rr Úmsgr2Zdestination_pidrrr r r r;‰s   z_ResourceSharer._serve)N) rrrrrÚ staticmethodrrr*r+r;r r r r r =s   r )rr@rrEr$ÚrÚcontextrrÚ__all__ÚplatformÚobjectrrr rrr r r r Ú s       `