Add stubs for the condition variable functions

svn path=/trunk/; revision=23844
This commit is contained in:
Thomas Bluemel 2006-08-31 16:56:49 +00:00
parent 26b82125e5
commit 87ab1c53a7
7 changed files with 182 additions and 0 deletions

View file

@ -505,6 +505,7 @@ RtlInitUnicodeString@8
RtlInitUnicodeStringEx@8 RtlInitUnicodeStringEx@8
;RtlInitializeAtomPackage ;RtlInitializeAtomPackage
RtlInitializeBitMap@12 RtlInitializeBitMap@12
RtlInitializeConditionVariable@4
RtlInitializeContext@20 RtlInitializeContext@20
RtlInitializeCriticalSection@4 RtlInitializeCriticalSection@4
RtlInitializeCriticalSectionAndSpinCount@8 RtlInitializeCriticalSectionAndSpinCount@8
@ -650,6 +651,8 @@ RtlSetTimeZoneInformation@4
;RtlSetUserFlagsHeap ;RtlSetUserFlagsHeap
RtlSetUserValueHeap@16 RtlSetUserValueHeap@16
RtlSizeHeap@12 RtlSizeHeap@12
RtlSleepConditionVariableCS@12
RtlSleepConditionVariableSRW@16
RtlSplay@4 RtlSplay@4
;RtlStartRXact ;RtlStartRXact
RtlStringFromGUID@8 RtlStringFromGUID@8
@ -703,6 +706,8 @@ RtlValidateProcessHeaps@0
RtlValidateUnicodeString@8 RtlValidateUnicodeString@8
RtlVerifyVersionInfo@16 RtlVerifyVersionInfo@16
;RtlWalkHeap ;RtlWalkHeap
RtlWakeAllConditionVariable@4
RtlWakeConditionVariable@4
RtlWriteRegistryValue@24 RtlWriteRegistryValue@24
;RtlZeroHeap ;RtlZeroHeap
RtlZeroMemory@8 RtlZeroMemory@8

View file

@ -586,6 +586,7 @@ HeapUsage@20
HeapValidate@12 HeapValidate@12
HeapWalk@8 HeapWalk@8
InitAtomTable@4 InitAtomTable@4
InitializeConditionVariable@4=NTDLL.RtlInitializeConditionVariable
InitializeCriticalSection@4 InitializeCriticalSection@4
InitializeCriticalSectionAndSpinCount@8 InitializeCriticalSectionAndSpinCount@8
InitializeSListHead@4=NTDLL.RtlInitializeSListHead InitializeSListHead@4=NTDLL.RtlInitializeSListHead
@ -900,6 +901,8 @@ ShowConsoleCursor@8
SignalObjectAndWait@16 SignalObjectAndWait@16
SizeofResource@8 SizeofResource@8
Sleep@4 Sleep@4
SleepConditionVariableCS@12
SleepConditionVariableSRW@16
SleepEx@8 SleepEx@8
SuspendThread@4 SuspendThread@4
SwitchToFiber@4 SwitchToFiber@4
@ -954,6 +957,8 @@ VirtualProtectEx@20
VirtualQuery@12 VirtualQuery@12
VirtualQueryEx@16 VirtualQueryEx@16
VirtualUnlock@8 VirtualUnlock@8
WakeAllConditionVariable@4=NTDLL.RtlWakeAllConditionVariable
WakeConditionVariable@4=NTDLL.RtlWakeConditionVariable
WaitCommEvent@12 WaitCommEvent@12
WaitForDebugEvent@8 WaitForDebugEvent@8
WaitForMultipleObjects@16 WaitForMultipleObjects@16

View file

@ -94,6 +94,7 @@
<file>lstring.c</file> <file>lstring.c</file>
</directory> </directory>
<directory name="synch"> <directory name="synch">
<file>condvar.c</file>
<file>critical.c</file> <file>critical.c</file>
<file>event.c</file> <file>event.c</file>
<file>mutex.c</file> <file>mutex.c</file>

View file

@ -0,0 +1,97 @@
/* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
* PURPOSE: Condition Variable functions
* PROGRAMMER: Thomas Weidenmueller <w3seek@reactos.com>
*/
/* File contains Vista Semantics */
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0600
#include <k32.h>
#define NDEBUG
#include "../include/debug.h"
/* FIXME: Move these RTL declarations to the NDK */
NTSTATUS
NTAPI
RtlSleepConditionVariableCS(IN OUT PRTL_CONDITION_VARIABLE ConditionVariable,
IN OUT PRTL_CRITICAL_SECTION CriticalSection,
IN PLARGE_INTEGER TimeOut OPTIONAL);
NTSTATUS
NTAPI
RtlSleepConditionVariableSRW(IN OUT PRTL_CONDITION_VARIABLE ConditionVariable,
IN OUT PRTL_SRWLOCK SRWLock,
IN PLARGE_INTEGER TimeOut OPTIONAL,
IN ULONG Flags);
/* PUBLIC FUNCTIONS ***********************************************************/
/*
* @implemented
*/
BOOL
WINAPI
SleepConditionVariableCS(IN OUT PCONDITION_VARIABLE ConditionVariable,
IN OUT PCRITICAL_SECTION CriticalSection,
IN DWORD dwMilliseconds)
{
NTSTATUS Status;
LARGE_INTEGER TimeOut;
PLARGE_INTEGER TimeOutPtr = NULL;
if (dwMilliseconds != INFINITE)
{
TimeOut.QuadPart = UInt32x32To64(-10000, dwMilliseconds);
TimeOutPtr = &TimeOut;
}
Status = RtlSleepConditionVariableCS((PRTL_CONDITION_VARIABLE)ConditionVariable,
(PRTL_CRITICAL_SECTION)CriticalSection,
TimeOutPtr);
if (!NT_SUCCESS(Status))
{
SetLastErrorByStatus(Status);
return FALSE;
}
return TRUE;
}
/*
* @implemented
*/
BOOL
WINAPI
SleepConditionVariableSRW(IN OUT PCONDITION_VARIABLE ConditionVariable,
IN OUT PSRWLOCK SRWLock,
IN DWORD dwMilliseconds,
IN ULONG Flags)
{
NTSTATUS Status;
LARGE_INTEGER TimeOut;
PLARGE_INTEGER TimeOutPtr = NULL;
if (dwMilliseconds != INFINITE)
{
TimeOut.QuadPart = UInt32x32To64(-10000, dwMilliseconds);
TimeOutPtr = &TimeOut;
}
Status = RtlSleepConditionVariableSRW((PRTL_CONDITION_VARIABLE)ConditionVariable,
(PRTL_SRWLOCK)SRWLock,
TimeOutPtr,
Flags);
if (!NT_SUCCESS(Status))
{
SetLastErrorByStatus(Status);
return FALSE;
}
return TRUE;
}

View file

@ -1058,6 +1058,7 @@ typedef struct _JOB_SET_ARRAY {
} JOB_SET_ARRAY, *PJOB_SET_ARRAY; } JOB_SET_ARRAY, *PJOB_SET_ARRAY;
#if (_WIN32_WINNT >= 0x0600) #if (_WIN32_WINNT >= 0x0600)
typedef RTL_SRWLOCK SRWLOCK, *PSRWLOCK; typedef RTL_SRWLOCK SRWLOCK, *PSRWLOCK;
typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE;
#endif #endif
typedef DWORD(WINAPI *LPPROGRESS_ROUTINE)(LARGE_INTEGER,LARGE_INTEGER,LARGE_INTEGER,LARGE_INTEGER,DWORD,DWORD,HANDLE,HANDLE,LPVOID); typedef DWORD(WINAPI *LPPROGRESS_ROUTINE)(LARGE_INTEGER,LARGE_INTEGER,LARGE_INTEGER,LARGE_INTEGER,DWORD,DWORD,HANDLE,HANDLE,LPVOID);
typedef void(WINAPI *LPFIBER_START_ROUTINE)(PVOID); typedef void(WINAPI *LPFIBER_START_ROUTINE)(PVOID);
@ -1662,6 +1663,9 @@ BOOL WINAPI ImpersonateNamedPipeClient(HANDLE);
BOOL WINAPI ImpersonateSelf(SECURITY_IMPERSONATION_LEVEL); BOOL WINAPI ImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
BOOL WINAPI InitAtomTable(DWORD); BOOL WINAPI InitAtomTable(DWORD);
BOOL WINAPI InitializeAcl(PACL,DWORD,DWORD); BOOL WINAPI InitializeAcl(PACL,DWORD,DWORD);
#if (_WIN32_WINNT >= 0x0600)
VOID WINAPI InitializeConditionVariable(PCONDITION_VARIABLE);
#endif
VOID WINAPI InitializeCriticalSection(LPCRITICAL_SECTION); VOID WINAPI InitializeCriticalSection(LPCRITICAL_SECTION);
BOOL WINAPI InitializeCriticalSectionAndSpinCount(LPCRITICAL_SECTION,DWORD); BOOL WINAPI InitializeCriticalSectionAndSpinCount(LPCRITICAL_SECTION,DWORD);
DWORD WINAPI SetCriticalSectionSpinCount(LPCRITICAL_SECTION,DWORD); DWORD WINAPI SetCriticalSectionSpinCount(LPCRITICAL_SECTION,DWORD);
@ -1978,6 +1982,10 @@ BOOL WINAPI SetWaitableTimer(HANDLE,const LARGE_INTEGER*,LONG,PTIMERAPCROUTINE,P
DWORD WINAPI SignalObjectAndWait(HANDLE,HANDLE,DWORD,BOOL); DWORD WINAPI SignalObjectAndWait(HANDLE,HANDLE,DWORD,BOOL);
DWORD WINAPI SizeofResource(HINSTANCE,HRSRC); DWORD WINAPI SizeofResource(HINSTANCE,HRSRC);
void WINAPI Sleep(DWORD); void WINAPI Sleep(DWORD);
#if (_WIN32_WINNT >= 0x0600)
BOOL WINAPI SleepConditionVariableCS(PCONDITION_VARIABLE,PCRITICAL_SECTION,DWORD);
BOOL WINAPI SleepConditionVariableSRW(PCONDITION_VARIABLE,PSRWLOCK,DWORD,ULONG);
#endif
DWORD WINAPI SleepEx(DWORD,BOOL); DWORD WINAPI SleepEx(DWORD,BOOL);
DWORD WINAPI SuspendThread(HANDLE); DWORD WINAPI SuspendThread(HANDLE);
void WINAPI SwitchToFiber(PVOID); void WINAPI SwitchToFiber(PVOID);
@ -2024,6 +2032,10 @@ DWORD WINAPI WaitForSingleObject(HANDLE,DWORD);
DWORD WINAPI WaitForSingleObjectEx(HANDLE,DWORD,BOOL); DWORD WINAPI WaitForSingleObjectEx(HANDLE,DWORD,BOOL);
BOOL WINAPI WaitNamedPipeA(LPCSTR,DWORD); BOOL WINAPI WaitNamedPipeA(LPCSTR,DWORD);
BOOL WINAPI WaitNamedPipeW(LPCWSTR,DWORD); BOOL WINAPI WaitNamedPipeW(LPCWSTR,DWORD);
#if (_WIN32_WINNT >= 0x0600)
VOID WINAPI WakeConditionVariable(PCONDITION_VARIABLE);
VOID WINAPI WakeAllConditionVariable(PCONDITION_VARIABLE);
#endif
BOOL WINAPI WinLoadTrustProvider(GUID*); BOOL WINAPI WinLoadTrustProvider(GUID*);
BOOL WINAPI WriteFile(HANDLE,PCVOID,DWORD,PDWORD,LPOVERLAPPED); BOOL WINAPI WriteFile(HANDLE,PCVOID,DWORD,PDWORD,LPOVERLAPPED);
BOOL WINAPI WriteFileEx(HANDLE,PCVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE); BOOL WINAPI WriteFileEx(HANDLE,PCVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);

61
reactos/lib/rtl/condvar.c Normal file
View file

@ -0,0 +1,61 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
* PURPOSE: Condition Variable Routines
* PROGRAMMER: Thomas Weidenmueller <w3seek@reactos.com>
*/
/* INCLUDES *****************************************************************/
#include <rtl.h>
#define NDEBUG
#include <debug.h>
/* FUNCTIONS *****************************************************************/
VOID
NTAPI
RtlInitializeConditionVariable(OUT PRTL_CONDITION_VARIABLE ConditionVariable)
{
ConditionVariable->Ptr = NULL;
}
VOID
NTAPI
RtlWakeConditionVariable(IN OUT PRTL_CONDITION_VARIABLE ConditionVariable)
{
UNIMPLEMENTED;
}
VOID
NTAPI
RtlWakeAllConditionVariable(IN OUT PRTL_CONDITION_VARIABLE ConditionVariable)
{
UNIMPLEMENTED;
}
NTSTATUS
NTAPI
RtlSleepConditionVariableCS(IN OUT PRTL_CONDITION_VARIABLE ConditionVariable,
IN OUT PRTL_CRITICAL_SECTION CriticalSection,
IN PLARGE_INTEGER TimeOut OPTIONAL)
{
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
NTAPI
RtlSleepConditionVariableSRW(IN OUT PRTL_CONDITION_VARIABLE ConditionVariable,
IN OUT PRTL_SRWLOCK SRWLock,
IN PLARGE_INTEGER TimeOut OPTIONAL,
IN ULONG Flags)
{
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}

View file

@ -47,6 +47,7 @@
<file>bitmap.c</file> <file>bitmap.c</file>
<file>bootdata.c</file> <file>bootdata.c</file>
<file>compress.c</file> <file>compress.c</file>
<file>condvar.c</file>
<file>crc32.c</file> <file>crc32.c</file>
<file>critical.c</file> <file>critical.c</file>
<file>dbgbuffer.c</file> <file>dbgbuffer.c</file>