ReactOS 0.4.17-dev-683-g0dafdc5
threadpool.c
Go to the documentation of this file.
1#include "k32_vista.h"
2
4
6 TP_CALLBACK_ENVIRON *environment );
7
9 TP_CALLBACK_ENVIRON *environment );
15 void *userdata, TP_CALLBACK_ENVIRON *environment);
16
17/***********************************************************************
18 * CreateThreadpoolTimer (kernelbase.@)
19 */
21 TP_CALLBACK_ENVIRON *environment )
22{
23 TP_TIMER *timer;
24
25 NTSTATUS status = TpAllocTimer( &timer, callback, userdata, environment );
26 if (!NT_SUCCESS(status))
27 {
29 return FALSE;
30 }
31
32 return timer;
33}
34
35static void WINAPI tp_io_callback( TP_CALLBACK_INSTANCE *instance, void *userdata, void *cvalue, IO_STATUS_BLOCK *iosb, TP_IO *io )
36{
39}
40
41/***********************************************************************
42 * CreateThreadpoolIo (kernelbase.@)
43 */
45 PVOID userdata, TP_CALLBACK_ENVIRON *environment )
46{
47 TP_IO *io;
48
49 NTSTATUS status = TpAllocIoCompletion( &io, handle, tp_io_callback, userdata, environment );
50 *(void **)io = callback; /* ntdll leaves us space to store our callback at the beginning of TP_IO struct */
51 if (!NT_SUCCESS(status))
52 {
54 return FALSE;
55 }
56
57 return io;
58}
59
60/***********************************************************************
61 * CreateThreadpoolWait (kernelbase.@)
62 */
64 TP_CALLBACK_ENVIRON *environment )
65{
66 TP_WAIT *wait;
67
68 NTSTATUS status = TpAllocWait( &wait, callback, userdata, environment );
69 if (!NT_SUCCESS(status))
70 {
72 return FALSE;
73 }
74
75 return wait;
76}
77
78
79/***********************************************************************
80 * CreateThreadpoolWork (kernelbase.@)
81 */
83 TP_CALLBACK_ENVIRON *environment )
84{
85 TP_WORK *work;
86
87 NTSTATUS status = TpAllocWork( &work, callback, userdata, environment );
88 if (!NT_SUCCESS(status))
89 {
91 return FALSE;
92 }
93 return work;
94}
95
96/***********************************************************************
97 * TrySubmitThreadpoolCallback (kernelbase.@)
98 */
100 TP_CALLBACK_ENVIRON *environment )
101{
102 NTSTATUS status = TpSimpleTryPost( callback, userdata, environment );
103 if (!NT_SUCCESS(status))
104 {
106 return FALSE;
107 }
108
109 return TRUE;
110}
111
112/***********************************************************************
113 * CreateThreadpoolCleanupGroup (kernelbase.@)
114 */
116{
119
120 if (!NT_SUCCESS(status))
121 {
123 return NULL;
124 }
125
126 return group;
127}
128
129/***********************************************************************
130 * CreateThreadpool (kernelbase.@)
131 */
133{
134 TP_POOL *pool = NULL;
136
137 if (!NT_SUCCESS(status))
138 {
140 return NULL;
141 }
142 return pool;
143}
#define DECLSPEC_HOTPATCH
Definition: _mingw.h:240
LONG NTSTATUS
Definition: precomp.h:26
@ Group
Definition: help.c:22
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
static HINSTANCE instance
Definition: main.c:40
#define SetLastError(x)
Definition: compat.h:752
#define CALLBACK
Definition: compat.h:35
NTSTATUS WINAPI TpAllocTimer(TP_TIMER **out, PTP_TIMER_CALLBACK callback, PVOID userdata, TP_CALLBACK_ENVIRON *environment)
Definition: threadpool.c:2601
PTP_POOL WINAPI DECLSPEC_HOTPATCH CreateThreadpool(void *reserved)
Definition: threadpool.c:132
NTSTATUS WINAPI TpAllocCleanupGroup(TP_CLEANUP_GROUP **Group)
Definition: threadpool.c:2534
BOOL WINAPI DECLSPEC_HOTPATCH TrySubmitThreadpoolCallback(PTP_SIMPLE_CALLBACK callback, PVOID userdata, TP_CALLBACK_ENVIRON *environment)
Definition: threadpool.c:99
PTP_IO WINAPI DECLSPEC_HOTPATCH CreateThreadpoolIo(HANDLE handle, PTP_WIN32_IO_CALLBACK callback, PVOID userdata, TP_CALLBACK_ENVIRON *environment)
Definition: threadpool.c:44
PTP_WAIT WINAPI DECLSPEC_HOTPATCH CreateThreadpoolWait(PTP_WAIT_CALLBACK callback, PVOID userdata, TP_CALLBACK_ENVIRON *environment)
Definition: threadpool.c:63
NTSTATUS WINAPI TpAllocWork(TP_WORK **out, PTP_WORK_CALLBACK callback, PVOID userdata, TP_CALLBACK_ENVIRON *environment)
Definition: threadpool.c:2687
BOOL WINAPI DECLSPEC_HOTPATCH TpSimpleTryPost(PTP_SIMPLE_CALLBACK callback, PVOID userdata, TP_CALLBACK_ENVIRON *environment)
Definition: threadpool.c:3243
NTSTATUS WINAPI TpAllocWait(TP_WAIT **out, PTP_WAIT_CALLBACK callback, PVOID userdata, TP_CALLBACK_ENVIRON *environment)
Definition: threadpool.c:2677
PTP_TIMER WINAPI DECLSPEC_HOTPATCH CreateThreadpoolTimer(PTP_TIMER_CALLBACK callback, PVOID userdata, TP_CALLBACK_ENVIRON *environment)
Definition: threadpool.c:20
static void WINAPI tp_io_callback(TP_CALLBACK_INSTANCE *instance, void *userdata, void *cvalue, IO_STATUS_BLOCK *iosb, TP_IO *io)
Definition: threadpool.c:35
PTP_CLEANUP_GROUP WINAPI DECLSPEC_HOTPATCH CreateThreadpoolCleanupGroup(void)
Definition: threadpool.c:115
PTP_WORK WINAPI DECLSPEC_HOTPATCH CreateThreadpoolWork(PTP_WORK_CALLBACK callback, PVOID userdata, TP_CALLBACK_ENVIRON *environment)
Definition: threadpool.c:82
NTSTATUS WINAPI TpAllocIoCompletion(TP_IO **out, HANDLE file, PTP_IO_CALLBACK callback, void *userdata, TP_CALLBACK_ENVIRON *environment)
Definition: threadpool.c:2544
void(CALLBACK * PTP_IO_CALLBACK)(PTP_CALLBACK_INSTANCE, void *, void *, IO_STATUS_BLOCK *, PTP_IO)
Definition: threadpool.c:3
NTSTATUS WINAPI TpAllocPool(TP_POOL **out, PVOID reserved)
Definition: threadpool.c:2588
r reserved
Definition: btrfs.c:3006
unsigned int BOOL
Definition: ntddk_ex.h:94
GLboolean GLuint group
Definition: glext.h:11120
static IPrintDialogCallback callback
Definition: printdlg.c:326
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK io
Definition: file.c:72
static PIO_STATUS_BLOCK iosb
Definition: file.c:70
Definition: fci.c:127
Definition: ps.c:97
VOID(WINAPI * PTP_WIN32_IO_CALLBACK)(_Inout_ PTP_CALLBACK_INSTANCE Instance, _Inout_opt_ PVOID Context, _Inout_opt_ PVOID Overlapped, _In_ ULONG IoResult, _In_ ULONG_PTR NumberOfBytesTransferred, _Inout_ PTP_IO Io)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
#define WINAPI
Definition: msvc.h:6
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)
struct _TP_WAIT * PTP_WAIT
Definition: winnt_old.h:4758
struct _TP_CLEANUP_GROUP TP_CLEANUP_GROUP
Definition: winnt_old.h:4784
VOID(NTAPI * PTP_WAIT_CALLBACK)(PTP_CALLBACK_INSTANCE, PVOID, PTP_WAIT, TP_WAIT_RESULT)
Definition: winnt_old.h:4797
struct _TP_CALLBACK_INSTANCE * PTP_CALLBACK_INSTANCE
Definition: winnt_old.h:4756
struct _TP_TIMER * PTP_TIMER
Definition: winnt_old.h:4757
struct _TP_WORK * PTP_WORK
Definition: winnt_old.h:4755
struct _TP_POOL TP_POOL
Definition: winnt_old.h:4754
VOID(NTAPI * PTP_WORK_CALLBACK)(_Inout_ PTP_CALLBACK_INSTANCE Instance, _Inout_opt_ PVOID Context, _Inout_ PTP_WORK Work)
Definition: winnt_old.h:4779
struct _TP_WAIT TP_WAIT
Definition: winnt_old.h:4758
struct _TP_IO * PTP_IO
Definition: winnt_old.h:4759
struct _TP_WORK TP_WORK
Definition: winnt_old.h:4755
struct _TP_IO TP_IO
Definition: winnt_old.h:4759
struct _TP_TIMER TP_TIMER
Definition: winnt_old.h:4757
VOID(NTAPI * PTP_SIMPLE_CALLBACK)(_Inout_ PTP_CALLBACK_INSTANCE Instance, _Inout_opt_ PVOID Context)
Definition: winnt_old.h:4787
struct _TP_POOL * PTP_POOL
Definition: winnt_old.h:4754
struct _TP_CLEANUP_GROUP * PTP_CLEANUP_GROUP
Definition: winnt_old.h:4784
VOID(NTAPI * PTP_TIMER_CALLBACK)(PTP_CALLBACK_INSTANCE, PVOID, PTP_TIMER)
Definition: winnt_old.h:4796
struct _TP_CALLBACK_INSTANCE TP_CALLBACK_INSTANCE
Definition: winnt_old.h:4756