a
    xd                     @   sL   d dl Z ddlmZ d dlZddlmZmZmZmZm	Z	 dd Z
dd ZdS )	    N   )	_timeouts)ffikernel32
ErrorCodesraise_winerror_handlec              	      s   t | }t|d}|tjkr&t  n|tjkr4dS ttj	ddtj	}z<t
jjt||dt
tjdI dH  W t| t| nt| t| 0 dS )zAsync and cancellable variant of WaitForSingleObject. Windows only.

    Args:
      handle: A Win32 handle, as a Python integer.

    Raises:
      OSError: If the handle is invalid, e.g. when it is already closed.

    r   NTF)ZcancellableZlimiter)r   r   WaitForSingleObjectr   WAIT_FAILEDr   ZWAIT_TIMEOUTZCreateEventAr   ZNULLtrioZ	to_threadZrun_syncWaitForMultipleObjects_syncZCapacityLimitermathinfZSetEventZCloseHandle)objhandleretcodeZcancel_handle r   M/var/www/html/Ranjet/env/lib/python3.9/site-packages/trio/_wait_for_object.pyr	      s&    





r	   c                  G   sZ   t | }td|}t|D ]}| | ||< q d}t||d|}|tjkrVt	  dS )z9Wait for any of the given Windows handles to be signaled.z
HANDLE[{}]l    FN)
lenr   newformatranger   ZWaitForMultipleObjectsr   r
   r   )ZhandlesnZ
handle_arritimeoutr   r   r   r   r   5   s    
r   )r    r   r   Z_core._windows_cffir   r   r   r   r   r	   r   r   r   r   r   <module>   s
   	(