3
Z_ð]µ  ã               @   s^   d dl Z d dlZd dlmZmZ d dlmZ ejdƒZejdƒZ	dd„ Z
G dd	„ d	ejƒZdS )
é    N)ÚpatcherÚsupport)ÚhubÚselectÚtimec               C   s
   t tdƒS )NÚpoll)Úhasattrr   © r	   r	   ú6/tmp/pip-build-yz_zf6az/eventlet/eventlet/hubs/poll.pyÚis_available
   s    r   c                   s^   e Zd Zd‡ fdd„	Z‡ fdd„Z‡ fdd„Zdd	d
„Z‡ fdd„Zdd„ Zddd„Z	‡  Z
S )ÚHubNc                sB   t t| ƒj|ƒ tjtjB | _tjtjB | _	tj
| _tjƒ | _d S )N)Úsuperr   Ú__init__r   ÚPOLLERRÚPOLLHUPÚEXC_MASKÚPOLLINÚPOLLPRIÚ	READ_MASKÚPOLLOUTÚ
WRITE_MASKr   )ÚselfÚclock)Ú	__class__r	   r
   r      s
    zHub.__init__c                s*   t t| ƒj|||||ƒ}| j|dd� |S )NT)Únew)r   r   ÚaddÚregister)r   ZevtypeÚfilenoÚcbÚtbÚmacÚlistener)r   r	   r
   r      s    zHub.addc                s    t t| ƒj|ƒ | j|jƒ d S )N)r   r   Úremover   r   )r   r!   )r   r	   r
   r"      s    z
Hub.removeFc             C   sò   d}| j | j j|ƒr&|| j| jB O }| j | j j|ƒrH|| j| jB O }y„|rž|rb| jj||ƒ qÊy| jj	||ƒ W qÊ t
tfk
rš   | jj||ƒ Y qÊX n,y| jj|ƒ W n tt
tfk
rÈ   Y nX W n  tk
rì   | j|ƒ ‚ Y nX d S )Nr   )Ú	listenersÚREADÚgetr   r   ÚWRITEr   r   r   ÚmodifyÚIOErrorÚOSErrorÚ
unregisterÚKeyErrorÚ
ValueErrorÚremove_descriptor)r   r   r   Úmaskr	   r	   r
   r      s(    

zHub.registerc                sB   t t| ƒj|ƒ y| jj|ƒ W n ttttfk
r<   Y nX d S )N)	r   r   r-   r   r*   r+   r,   r(   r)   )r   r   )r   r	   r
   r-   :   s
    zHub.remove_descriptorc             C   s   | j j t|d ƒƒS )Ng     @�@)r   Úint)r   Úsecondsr	   r	   r
   Údo_pollC   s    zHub.do_pollc             C   s¶  | j | j }| j | j }| r6| r6|r2tj|ƒ d S y| j|ƒ}W n> ttjfk
r‚ } zt	j
|ƒtjkrpd S ‚ W Y d d }~X nX | j}| jr˜| jƒ  tƒ }tj}xž|D ]–\}	}
|
| j@ rÒ|j|j|	|ƒ|	fƒ |
| j@ rò|j|j|	|ƒ|	fƒ |
tj@ �r
| j|	ƒ qª|
| j@ rª|j|j|	|ƒ|	fƒ |j|j|	|ƒ|	fƒ qªW x\|D ]T\}}	y|j|	ƒ W n: |k
�rx   ‚ Y n$   | j|	tjƒ ƒ t	jƒ  Y nX �qJW | j�r²| jƒ  d S )N) r#   r$   r&   r   Úsleepr1   r(   r   Úerrorr   Ú	get_errnoÚerrnoZEINTRÚSYSTEM_EXCEPTIONSZdebug_blockingZblock_detect_preÚsetr   Únoopr   r   r%   r   ÚPOLLNVALr-   r   r   Zsquelch_exceptionÚsysÚexc_infoZclear_sys_exc_infoZblock_detect_post)r   r0   ZreadersZwritersZpresultÚer6   Ú	callbacksr8   r   Úeventr!   r	   r	   r
   ÚwaitG   sL    




zHub.wait)N)F)N)Ú__name__Ú
__module__Ú__qualname__r   r   r"   r   r-   r1   r?   Ú__classcell__r	   r	   )r   r
   r      s   
	r   )r5   r:   Zeventletr   r   Zeventlet.hubsr   Úoriginalr   r   r   ZBaseHubr   r	   r	   r	   r
   Ú<module>   s   

