U
    g!                     @  sd   d dl mZ d dlZd dlZddlmZmZmZmZm	Z	m
Z
mZ ddddd	Zddd
ddZdS )    )annotationsN   )CData
ErrorCodes_handleffihandle_arraykernel32raise_winerrorzint | CDataNone)objreturnc              	     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 5 t
| t| X 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abandon_on_cancelZlimiter)r   r	   WaitForSingleObjectr   WAIT_FAILEDr
   ZWAIT_TIMEOUTZCreateEventAr   ZNULLZSetEventZCloseHandletrioZ	to_threadZrun_syncWaitForMultipleObjects_syncZCapacityLimitermathinf)r   handleretcodeZcancel_handle r   9/tmp/pip-unpacked-wheel-ks04xdmi/trio/_wait_for_object.pyr      s"    




r   )handlesr   c                  G  sR   t | }t|}t|D ]}| | ||< qd}t||d|}|tjkrNt  dS )z9Wait for any of the given Windows handles to be signaled.l    FN)lenr   ranger	   ZWaitForMultipleObjectsr   r   r
   )r   nZ
handle_arritimeoutr   r   r   r   r   :   s    
r   )
__future__r   r   r   Z_core._windows_cffir   r   r   r   r   r	   r
   r   r   r   r   r   r   <module>   s
   $(