U
    g0                     @   s  d dl Z d dlZd dlZd dlZd dlmZ ddlmZmZ ddl	m
Z
mZ ddlmZ ejdkrlejdksterttz d d	lmZ edd
ddZW nJ ek
r   d dlZe Zed edjZedd
ddZY nX e
ejZeeddddZdddddZdS )    N)TYPE_CHECKING   )_core_subprocess)CapacityLimiterEvent)to_thread_run_syncwin32darwin)waitid)pidreturnc                 C   s   t tj| tjtjB  d S N)r   osP_PIDWEXITEDWNOWAIT)r    r   D/tmp/pip-unpacked-wheel-ks04xdmi/trio/_subprocess_platform/waitid.pysync_wait_reapable   s    r   z
typedef struct siginfo_s {
    int si_signo;
    int si_errno;
    int si_code;
    int si_pid;
    int si_uid;
    int si_status;
    int pad[26];
} siginfo_t;
int waitid(int idtype, int id, siginfo_t* result, int options);
c                 C   sd   d}d}t jdkrd}nd}td}t|| |||B dk r`tj}|tjkrNq&t|t	|q&d S )N      r
       i   zsiginfo_t *r   )
sysplatform
waitid_ffinewwaitid_cffierrnoZEINTROSErrorr   strerror)r   r   r   r   resultZ	got_errnor   r   r   r   /   s    


)r   eventr   c                    sD   z4ztt| dtdI dH  W n tk
r0   Y nX W 5 |   X dS )zdSpawn a thread that waits for ``pid`` to exit, then wake any tasks
    that were waiting on it.
    T)Zabandon_on_cancelZlimiterN)setr   r   waitid_limiterr   )r   r"   r   r   r   _waitid_system_taskG   s    	
r%   z_subprocess.Process)processr   c                    sJ   | j d kr&t  | _ }tt| j| t| j ts6t| j  I d H  d S r   )	Z_wait_for_exit_datar   r   Zspawn_system_taskr%   r   
isinstanceAssertionErrorwait)r&   r"   r   r   r   wait_child_exitingb   s
    
r*   )r   mathr   r   typingr    r   r   Z_syncr   r   _threadsr   r   r(   r   intr   ImportErrorZcffiZFFIr   Zcdefdlopenr   infr$   r%   r*   r   r   r   r   <module>   s,   
