o
    ҷh!                     @  sX   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
ZdddZdS )    )annotationsN   )CData
ErrorCodes_handleffihandle_arraykernel32raise_winerrorobjint | CDatareturnNonec              	     s   t | }t|d}|tjkrt  n|tjkrdS ttj	ddtj	}zt
jjt||dt
tjdI dH  W t| t| dS t| t| w )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)abandon_on_cancellimiter)r   r	   WaitForSingleObjectr   WAIT_FAILEDr
   WAIT_TIMEOUTCreateEventAr   NULLtrio	to_threadrun_syncWaitForMultipleObjects_syncCapacityLimitermathinfSetEventCloseHandle)r   handleretcodecancel_handle r"   H/var/www/html/venv/lib/python3.10/site-packages/trio/_wait_for_object.pyr      s(   





r   handlesc                  G  sV   t | }t|}t|D ]}| | ||< qd}t||d|}|tjkr)t  dS dS )z9Wait for any of the given Windows handles to be signaled.l    FN)lenr   ranger	   WaitForMultipleObjectsr   r   r
   )r$   n
handle_arritimeoutr    r"   r"   r#   r   :   s   

r   )r   r   r   r   )r$   r   r   r   )
__future__r   r   r   _core._windows_cffir   r   r   r   r   r	   r
   r   r   r"   r"   r"   r#   <module>   s    $
(