a
    xdW                     @   s   d dl Z d dlZd dlZd dlZddlmZmZ ddlmZm	Z	 ddl
mZ zd dlmZ dd ZW n@ ey   d dlZe Zed	 edjZd
d ZY n0 eejZee	ddddZdddddZdS )    N   )_core_subprocess)CapacityLimiterEvent)to_thread_run_sync)waitidc                 C   s   t tj| tjtjB  d S N)r   osP_PIDWEXITEDWNOWAIT)pid r   X/var/www/html/Ranjet/env/lib/python3.9/site-packages/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      darwin    i   zsiginfo_t *r   )
sysplatform
waitid_ffinewr   errnoZEINTROSErrorr
   strerror)r   r   r   r   resultZ	got_errnor   r   r   r   ,   s    


)r   eventreturnc                    sJ   z:zt t| dtdI dH  W n ty.   Y n0 W |  n
|  0 dS )zdSpawn a thread that waits for ``pid`` to exit, then wake any tasks
    that were waiting on it.
    T)ZcancellableZlimiterN)r   r   waitid_limiterr   set)r   r   r   r   r   _waitid_system_taskD   s    	r"   z_subprocess.Process)processr   c                    sJ   | j d u r&t  | _ }tt| j| t| j ts6J | j  I d H  d S r	   )Z_wait_for_exit_datar   r   Zspawn_system_taskr"   r   
isinstancewait)r#   r   r   r   r   wait_child_exiting\   s
    
r&   )r   mathr
   r    r   r   Z_syncr   r   _threadsr   r   r   ImportErrorZcffiZFFIr   Zcdefdlopeninfr    intr"   r&   r   r   r   r   <module>   s(   
