From f9fa43567340afbe4a89ecf34536965cd144a089 Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Mon, 3 Jul 2006 20:23:48 +0000 Subject: [PATCH] 2 of 4 commit (sorry my svn clinet is crazy for moment) Commit w3seek patch from bug 1609 : file attachment (id=910) The attached patch implements QueueUserWorkItem()/RtlQueueWorkItem() (lacks optimizations!!!). WINE's latest rpcrt4 relies on it. 1. Implement QueueUserWorkItem()/RtlQueueWorkItem() : 2. A slightly optimized 3. Supports WT_TRANSFER_IMPERSONATION 4. Slightly improved handling of growing/shrinking the pool by assuming work items with WT_EXECUTELONGFUNCTION run longer 5. Fixes a hack that made a worker thread always terminate if there were at least one more thread available svn path=/trunk/; revision=22805 --- reactos/include/ndk/rtlfuncs.h | 12 ++++++++++++ reactos/include/psdk/winnt.h | 8 ++++++++ 2 files changed, 20 insertions(+) diff --git a/reactos/include/ndk/rtlfuncs.h b/reactos/include/ndk/rtlfuncs.h index 3713530250b..487a1b96dd4 100644 --- a/reactos/include/ndk/rtlfuncs.h +++ b/reactos/include/ndk/rtlfuncs.h @@ -1932,6 +1932,18 @@ RtlSetProcessIsCritical( #define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock) +// +// Thread Pool Functions +// + +NTSYSAPI +NTSTATUS +NTAPI +RtlQueueWorkItem( + IN WORKERCALLBACKFUNC Function, + IN PVOID Context OPTIONAL, + IN ULONG Flags); + // // Environment/Path Functions // diff --git a/reactos/include/psdk/winnt.h b/reactos/include/psdk/winnt.h index 91f604d2dcb..bdabef7763e 100644 --- a/reactos/include/psdk/winnt.h +++ b/reactos/include/psdk/winnt.h @@ -666,6 +666,7 @@ typedef enum #define LANG_ESTONIAN 0x25 #define LANG_LATVIAN 0x26 #define LANG_LITHUANIAN 0x27 +#define LANG_TAJIK 0x28 #define LANG_FARSI 0x29 #define LANG_VIETNAMESE 0x2a #define LANG_ARMENIAN 0x2b @@ -804,6 +805,7 @@ typedef enum #define SUBLANG_SPANISH_PUERTO_RICO 0x14 #define SUBLANG_SWEDISH 0x01 #define SUBLANG_SWEDISH_FINLAND 0x02 +#define SUBLANG_TAJIK_TAJIKISTAN 0x01 #define SUBLANG_THAI_THAILAND 0x1 #define SUBLANG_URDU_PAKISTAN 0x01 #define SUBLANG_URDU_INDIA 0x02 @@ -1071,6 +1073,8 @@ typedef enum #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 #define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11 #define IMAGE_DIRECTORY_ENTRY_IAT 12 +#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13 +#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 #define IMAGE_SCN_TYPE_REG 0 #define IMAGE_SCN_TYPE_DSECT 1 #define IMAGE_SCN_TYPE_NOLOAD 2 @@ -1482,12 +1486,16 @@ typedef enum #define VER_SUITE_BLADE 1024 #define WT_EXECUTEDEFAULT 0x00000000 #define WT_EXECUTEINIOTHREAD 0x00000001 +#define WT_EXECUTEINUITHREAD 0x00000002 #define WT_EXECUTEINWAITTHREAD 0x00000004 #define WT_EXECUTEONLYONCE 0x00000008 #define WT_EXECUTELONGFUNCTION 0x00000010 #define WT_EXECUTEINTIMERTHREAD 0x00000020 +#define WT_EXECUTEINPERSISTENTIOTHREAD 0x00000040 #define WT_EXECUTEINPERSISTENTTHREAD 0x00000080 #define WT_TRANSFER_IMPERSONATION 0x00000100 +#define WT_SET_MAX_THREADPOOL_THREADS(flags,limit) ((flags)|=(limit)<<16) +typedef VOID (NTAPI *WORKERCALLBACKFUNC)(PVOID); #if (_WIN32_WINNT >= 0x0501) #define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION 1 #define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION 2