17 #undef LIST_FOR_EACH_SAFE 18 #include <wine/list.h> 64 #define EXPIRE_NEVER (~(ULONGLONG) 0) 65 #define TIMER_QUEUE_MAGIC 0x516d6954 94 if (
t->destroy &&
t->runcount == 0)
103 t->callback(
t->param,
TRUE);
136 if (set_event && &
t->entry ==
list_head(&
q->timers))
162 next =
t->expire +
t->period;
262 if (
t->runcount == 0)
364 DPRINT1(
"asynchronous return on completion event unimplemented\n");
383 if (!default_timer_queue)
390 (
void **) &default_timer_queue,
q,
NULL);
396 return default_timer_queue;
557 else if (CompletionEvent)
558 event = CompletionEvent;
562 if (
t->runcount == 0 &&
event)
static void queue_move_timer(struct queue_timer *t, ULONGLONG time, BOOL set_event)
PRTL_START_POOL_THREAD RtlpStartThreadFunc
NTSTATUS WINAPI RtlDeleteTimer(HANDLE TimerQueue, HANDLE Timer, HANDLE CompletionEvent)
PRTL_EXIT_POOL_THREAD RtlpExitThreadFunc
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
static VOID WINAPI timer_callback_wrapper(LPVOID p)
NTSTATUS NTAPI RtlDeleteTimerQueue(HANDLE TimerQueue)
NTSYSAPI NTSTATUS NTAPI RtlQueueWorkItem(_In_ WORKERCALLBACKFUNC Function, _In_opt_ PVOID Context, _In_ ULONG Flags)
#define WT_EXECUTEINIOTHREAD
NTSTATUS NTAPI NtQueryPerformanceCounter(OUT PLARGE_INTEGER PerformanceCounter, OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL)
NTSTATUS NTAPI NtCreateEvent(OUT PHANDLE EventHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN EVENT_TYPE EventType, IN BOOLEAN InitialState)
NTSYSAPI NTSTATUS NTAPI RtlEnterCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
#define INVALID_HANDLE_VALUE
_In_ LARGE_INTEGER _In_ ULONG Period
static ULONG queue_get_timeout(struct timer_queue *q)
VOID(NTAPI * WAITORTIMERCALLBACKFUNC)(PVOID pvContext, BOOLEAN fTimerOrWaitFired)
static PLARGE_INTEGER get_nt_timeout(PLARGE_INTEGER pTime, ULONG timeout)
#define WT_TRANSFER_IMPERSONATION
NTSTATUS WINAPI RtlDeleteTimerQueueEx(HANDLE TimerQueue, HANDLE CompletionEvent)
NTSTATUS WINAPI RtlCreateTimerQueue(PHANDLE NewTimerQueue)
static void queue_remove_timer(struct queue_timer *t)
GLbitfield GLuint64 timeout
#define STATUS_INVALID_HANDLE
#define WT_EXECUTEINPERSISTENTTHREAD
__WINE_SERVER_LIST_INLINE struct list * list_head(const struct list *list)
static void timer_cleanup_callback(struct queue_timer *t)
NTSTATUS NTAPI RtlCancelTimer(HANDLE TimerQueue, HANDLE Timer)
return STATUS_NOT_IMPLEMENTED
static void queue_add_timer(struct queue_timer *t, ULONGLONG time, BOOL set_event)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
NTSTATUS WINAPI RtlCreateTimer(HANDLE TimerQueue, PHANDLE NewTimer, WAITORTIMERCALLBACKFUNC Callback, PVOID Parameter, DWORD DueTime, DWORD Period, ULONG Flags)
NTSYSAPI NTSTATUS NTAPI RtlLeaveCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
static struct timer_queue * get_timer_queue(HANDLE TimerQueue)
#define InterlockedCompareExchangePointer
static void queue_destroy_timer(struct queue_timer *t)
_In_ PCCERT_CONTEXT _In_opt_ LPFILETIME pTime
#define LIST_FOR_EACH(cursor, list)
NTSTATUS WINAPI RtlSetTimer(HANDLE TimerQueue, PHANDLE NewTimer, WAITORTIMERCALLBACKFUNC Callback, PVOID Parameter, DWORD DueTime, DWORD Period, ULONG Flags)
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
__WINE_SERVER_LIST_INLINE void list_remove(struct list *elem)
#define WT_EXECUTELONGFUNCTION
NTSTATUS NTAPI NtResumeThread(IN HANDLE ThreadHandle, OUT PULONG SuspendCount OPTIONAL)
NTSTATUS RtlpInitializeTimerThread(VOID)
_Must_inspect_result_ _In_ ULONG Flags
NTSTATUS NTAPI NtSetEvent(IN HANDLE EventHandle, OUT PLONG PreviousState OPTIONAL)
NTSYSAPI NTSTATUS NTAPI RtlInitializeCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
#define TIMER_QUEUE_MAGIC
GLdouble GLdouble GLdouble GLdouble q
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
#define WT_EXECUTEINTIMERTHREAD
static ULONGLONG queue_current_time(void)
#define STATUS_INVALID_PARAMETER_1
static DWORD WINAPI timer_queue_thread_proc(LPVOID p)
_Must_inspect_result_ _In_ PWDF_TIMER_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFTIMER * Timer
_In_ WDFINTERRUPT _In_ PFN_WDF_INTERRUPT_SYNCHRONIZE Callback
__WINE_SERVER_LIST_INLINE int list_empty(const struct list *list)
static void queue_timer_expire(struct timer_queue *q)
static unsigned __int64 next
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
__WINE_SERVER_LIST_INLINE void list_add_before(struct list *elem, struct list *to_add)
_In_ WDFTIMER _In_ LONGLONG DueTime
__WINE_SERVER_LIST_INLINE void list_init(struct list *list)
WAITORTIMERCALLBACKFUNC callback
NTSYSAPI NTSTATUS NTAPI RtlDeleteCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
static SERVICE_STATUS status
NTSTATUS WINAPI RtlUpdateTimer(HANDLE TimerQueue, HANDLE Timer, DWORD DueTime, DWORD Period)
NTSTATUS(NTAPI * PRTL_EXIT_POOL_THREAD)(_In_ NTSTATUS ExitStatus)
NTSTATUS(NTAPI * PRTL_START_POOL_THREAD)(_In_ PTHREAD_START_ROUTINE Function, _In_ PVOID Parameter, _Out_ PHANDLE ThreadHandle)
NTSYSAPI NTSTATUS NTAPI NtWaitForSingleObject(IN HANDLE hObject, IN BOOLEAN bAlertable, IN PLARGE_INTEGER Timeout)