Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-fonts
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Aleksandr Isakov
wine-fonts
Commits
3757cde7
Commit
3757cde7
authored
Jun 13, 2018
by
Zebediah Figura
Committed by
Vitaly Lipatov
Jul 30, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
kernel32/tests: Add some tests for wait timeouts.
parent
6cfe2024
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
68 additions
and
0 deletions
+68
-0
sync.c
dlls/kernel32/tests/sync.c
+68
-0
No files found.
dlls/kernel32/tests/sync.c
View file @
3757cde7
...
...
@@ -57,6 +57,7 @@ static BOOLEAN (WINAPI *pTryAcquireSRWLockShared)(PSRWLOCK);
static
NTSTATUS
(
WINAPI
*
pNtAllocateVirtualMemory
)(
HANDLE
,
PVOID
*
,
ULONG_PTR
,
SIZE_T
*
,
ULONG
,
ULONG
);
static
NTSTATUS
(
WINAPI
*
pNtFreeVirtualMemory
)(
HANDLE
,
PVOID
*
,
SIZE_T
*
,
ULONG
);
static
NTSTATUS
(
WINAPI
*
pNtQuerySystemTime
)(
LARGE_INTEGER
*
);
static
NTSTATUS
(
WINAPI
*
pNtWaitForSingleObject
)(
HANDLE
,
BOOLEAN
,
const
LARGE_INTEGER
*
);
static
NTSTATUS
(
WINAPI
*
pNtWaitForMultipleObjects
)(
ULONG
,
const
HANDLE
*
,
BOOLEAN
,
BOOLEAN
,
const
LARGE_INTEGER
*
);
static
PSLIST_ENTRY
(
__fastcall
*
pRtlInterlockedPushListSList
)(
PSLIST_HEADER
list
,
PSLIST_ENTRY
first
,
...
...
@@ -1530,11 +1531,15 @@ static HANDLE modify_handle(HANDLE handle, DWORD modify)
return
ULongToHandle
(
tmp
);
}
#define TIMEOUT_INFINITE (((LONGLONG)0x7fffffff) << 32 | 0xffffffff)
static
void
test_WaitForSingleObject
(
void
)
{
HANDLE
signaled
,
nonsignaled
,
invalid
;
LARGE_INTEGER
ntnow
,
ntthen
;
LARGE_INTEGER
timeout
;
NTSTATUS
status
;
DWORD
now
,
then
;
DWORD
ret
;
signaled
=
CreateEventW
(
NULL
,
TRUE
,
TRUE
,
NULL
);
...
...
@@ -1619,6 +1624,68 @@ static void test_WaitForSingleObject(void)
status
=
pNtWaitForSingleObject
(
GetCurrentThread
(),
FALSE
,
&
timeout
);
ok
(
status
==
STATUS_TIMEOUT
,
"expected STATUS_TIMEOUT, got %08lx
\n
"
,
status
);
ret
=
WaitForSingleObject
(
signaled
,
0
);
ok
(
ret
==
0
,
"got %lu
\n
"
,
ret
);
ret
=
WaitForSingleObject
(
nonsignaled
,
0
);
ok
(
ret
==
WAIT_TIMEOUT
,
"got %lu
\n
"
,
ret
);
/* test that a timed wait actually does wait */
now
=
GetTickCount
();
ret
=
WaitForSingleObject
(
nonsignaled
,
100
);
then
=
GetTickCount
();
ok
(
ret
==
WAIT_TIMEOUT
,
"got %lu
\n
"
,
ret
);
ok
(
abs
((
then
-
now
)
-
100
)
<
5
,
"got %lu ms
\n
"
,
then
-
now
);
now
=
GetTickCount
();
ret
=
WaitForSingleObject
(
signaled
,
100
);
then
=
GetTickCount
();
ok
(
ret
==
0
,
"got %lu
\n
"
,
ret
);
ok
(
abs
(
then
-
now
)
<
5
,
"got %lu ms
\n
"
,
then
-
now
);
ret
=
WaitForSingleObject
(
signaled
,
INFINITE
);
ok
(
ret
==
0
,
"got %lu
\n
"
,
ret
);
/* test NT timeouts */
pNtQuerySystemTime
(
&
ntnow
);
timeout
.
QuadPart
=
ntnow
.
QuadPart
+
100
*
10000
;
status
=
pNtWaitForSingleObject
(
nonsignaled
,
FALSE
,
&
timeout
);
pNtQuerySystemTime
(
&
ntthen
);
ok
(
status
==
STATUS_TIMEOUT
,
"got %#lx
\n
"
,
status
);
ok
(
abs
(((
ntthen
.
QuadPart
-
ntnow
.
QuadPart
)
/
10000
)
-
100
)
<
5
,
"got %s ns
\n
"
,
wine_dbgstr_longlong
((
ntthen
.
QuadPart
-
ntnow
.
QuadPart
)
*
100
));
pNtQuerySystemTime
(
&
ntnow
);
timeout
.
QuadPart
=
-
100
*
10000
;
status
=
pNtWaitForSingleObject
(
nonsignaled
,
FALSE
,
&
timeout
);
pNtQuerySystemTime
(
&
ntthen
);
ok
(
status
==
STATUS_TIMEOUT
,
"got %#lx
\n
"
,
status
);
ok
(
abs
(((
ntthen
.
QuadPart
-
ntnow
.
QuadPart
)
/
10000
)
-
100
)
<
5
,
"got %s ns
\n
"
,
wine_dbgstr_longlong
((
ntthen
.
QuadPart
-
ntnow
.
QuadPart
)
*
100
));
status
=
pNtWaitForSingleObject
(
signaled
,
FALSE
,
NULL
);
ok
(
status
==
0
,
"got %#lx
\n
"
,
status
);
timeout
.
QuadPart
=
TIMEOUT_INFINITE
;
status
=
pNtWaitForSingleObject
(
signaled
,
FALSE
,
&
timeout
);
ok
(
status
==
0
,
"got %#lx
\n
"
,
status
);
pNtQuerySystemTime
(
&
ntnow
);
timeout
.
QuadPart
=
ntnow
.
QuadPart
;
status
=
pNtWaitForSingleObject
(
nonsignaled
,
FALSE
,
&
timeout
);
pNtQuerySystemTime
(
&
ntthen
);
ok
(
status
==
STATUS_TIMEOUT
,
"got %#lx
\n
"
,
status
);
ok
(
abs
((
ntthen
.
QuadPart
-
ntnow
.
QuadPart
)
/
10000
)
<
5
,
"got %s ns
\n
"
,
wine_dbgstr_longlong
((
ntthen
.
QuadPart
-
ntnow
.
QuadPart
)
*
100
));
pNtQuerySystemTime
(
&
ntnow
);
timeout
.
QuadPart
=
ntnow
.
QuadPart
-
100
*
10000
;
status
=
pNtWaitForSingleObject
(
nonsignaled
,
FALSE
,
&
timeout
);
pNtQuerySystemTime
(
&
ntthen
);
ok
(
status
==
STATUS_TIMEOUT
,
"got %#lx
\n
"
,
status
);
ok
(
abs
((
ntthen
.
QuadPart
-
ntnow
.
QuadPart
)
/
10000
)
<
5
,
"got %s ns
\n
"
,
wine_dbgstr_longlong
((
ntthen
.
QuadPart
-
ntnow
.
QuadPart
)
*
100
));
CloseHandle
(
signaled
);
CloseHandle
(
nonsignaled
);
}
...
...
@@ -3158,6 +3225,7 @@ START_TEST(sync)
pTryAcquireSRWLockShared
=
(
void
*
)
GetProcAddress
(
hdll
,
"TryAcquireSRWLockShared"
);
pNtAllocateVirtualMemory
=
(
void
*
)
GetProcAddress
(
hntdll
,
"NtAllocateVirtualMemory"
);
pNtFreeVirtualMemory
=
(
void
*
)
GetProcAddress
(
hntdll
,
"NtFreeVirtualMemory"
);
pNtQuerySystemTime
=
(
void
*
)
GetProcAddress
(
hntdll
,
"NtQuerySystemTime"
);
pNtWaitForSingleObject
=
(
void
*
)
GetProcAddress
(
hntdll
,
"NtWaitForSingleObject"
);
pNtWaitForMultipleObjects
=
(
void
*
)
GetProcAddress
(
hntdll
,
"NtWaitForMultipleObjects"
);
pRtlInterlockedPushListSList
=
(
void
*
)
GetProcAddress
(
hntdll
,
"RtlInterlockedPushListSList"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment