3
Z_ð]'  ã               @   sô   d Z ddlmZ ddlZddlmZ ddlm	Z	 ddl
mZ ddlZddd	d
dddddddgZejZdaejr|dd„ ZejZdd„ Zddd„Zdd„ Zf dfdd„ZeZdd
„ ZeZdd„ ZejZdd„ ZeedƒräejZ ddd„Zddl!m"Z# dS ) z:Implements the standard thread module, using greenthreads.é    )Ú_threadN)Ú	greenlets)Úgreenthread)Ú	SemaphoreÚ	get_identÚstart_new_threadÚ	start_newÚallocate_lockÚallocateÚexitÚinterrupt_mainÚ
stack_sizeÚ_localÚLockTypeÚ_countc               C   s   t ƒ S )N)r	   © r   r   ú9/tmp/pip-build-yz_zf6az/eventlet/eventlet/green/thread.pyÚ_set_sentinel   s    r   c               C   s   t S )N)Ú__threadcountr   r   r   r   r      s    c             C   s    | d krt tjƒ ƒS t | ƒS d S )N)ÚidÚgreenletÚ
getcurrent)Zgrr   r   r   r      s    c             C   s&   t d7 a z| ||Ž W d t d8 a X d S )Né   )r   )ÚfuncÚargsÚkwargsr   r   r   Ú__thread_body&   s    r   c                sd   t jd	krDt| ddƒdkrDt| dƒrD| j‰ˆj‰ ‡ ‡fdd„}|ˆ_|pJi }tjt| ||ƒ}t	|ƒS )
Né   é   Ú
__module__Ú Ú	threadingÚ__self__c                  s&   z
ˆ ƒ  W d ˆj d k	r ˆj jƒ  X d S )N)Ú_tstate_lockÚreleaser   )Úbootstrap_innerÚthreadr   r   Úwrap_bootstrap_inner=   s    

z.start_new_thread.<locals>.wrap_bootstrap_inner)r   r   )
ÚsysÚversion_infoÚgetattrÚhasattrr"   Ú_bootstrap_innerr   Zspawn_nr   r   )Úfunctionr   r   r'   Úgr   )r%   r&   r   r   /   s    

c              G   s   t dƒS )Nr   )r   )Úar   r   r   r	   O   s    c               C   s
   t j‚d S )N)r   ZGreenletExitr   r   r   r   r   V   s    c              C   s2   t jƒ } | jr(| jj r(| jjtƒ ƒ ntƒ ‚d S )N)r   r   ÚparentZdeadÚthrowÚKeyboardInterrupt)Úcurrr   r   r   r   ]   s    c             C   s$   | d krt ƒ S | t ƒ kr t | ƒS d S )N)Ú__original_stack_size__)Úsizer   r   r   r   h   s
    
)Úlocal)N)N)$Ú__doc__Z	six.movesr   Z__threadÚsixZeventlet.supportr   r   Zeventletr   Zeventlet.semaphorer   r   r(   Z__patched__Úerrorr   ÚPY3r   ÚTIMEOUT_MAXr   r   r   r   r   r	   r
   r   Úexit_threadr   r+   r   r4   Zeventlet.corolocalr6   r   r   r   r   r   Ú<module>   s8   

	


