https://git.reactos.org/?p=reactos.git;a=commitdiff;h=6ec0420dc6ba17e58ffa9…
commit 6ec0420dc6ba17e58ffa9cbb9ab4a190ba5b2e6c
Author: Jérôme Gardou <jerome.gardou(a)reactos.org>
AuthorDate: Fri Jul 30 15:40:33 2021 +0200
Commit: Jérôme Gardou <zefklop(a)users.noreply.github.com>
CommitDate: Tue Aug 3 23:13:19 2021 +0200
[WIN32K:NTUSER] Allocate & free timers under global user lock
---
win32ss/user/ntuser/simplecall.c | 9 ++++++++-
win32ss/user/ntuser/timer.c | 37 +++++++++++++++++++------------------
2 files changed, 27 insertions(+), 19 deletions(-)
diff --git a/win32ss/user/ntuser/simplecall.c b/win32ss/user/ntuser/simplecall.c
index fdc52c1c478..ce190357db1 100644
--- a/win32ss/user/ntuser/simplecall.c
+++ b/win32ss/user/ntuser/simplecall.c
@@ -761,7 +761,14 @@ NtUserCallHwndParam(
switch (Routine)
{
case HWNDPARAM_ROUTINE_KILLSYSTEMTIMER:
- return IntKillTimer(UserGetWindowObject(hWnd), (UINT_PTR)Param, TRUE);
+ {
+ DWORD ret;
+
+ UserEnterExclusive();
+ ret = IntKillTimer(UserGetWindowObject(hWnd), (UINT_PTR)Param, TRUE);
+ UserLeave();
+ return ret;
+ }
case HWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID:
{
diff --git a/win32ss/user/ntuser/timer.c b/win32ss/user/ntuser/timer.c
index 3ae4dea0f88..31ec4e256da 100644
--- a/win32ss/user/ntuser/timer.c
+++ b/win32ss/user/ntuser/timer.c
@@ -635,19 +635,18 @@ NtUserSetTimer
)
{
PWND Window = NULL;
- DECLARE_RETURN(UINT_PTR);
+ UINT_PTR ret;
TRACE("Enter NtUserSetTimer\n");
UserEnterExclusive();
if (hWnd) Window = UserGetWindowObject(hWnd);
- UserLeave();
- RETURN(IntSetTimer(Window, nIDEvent, uElapse, lpTimerFunc, TMRF_TIFROMWND));
+ ret = IntSetTimer(Window, nIDEvent, uElapse, lpTimerFunc, TMRF_TIFROMWND);
-CLEANUP:
- TRACE("Leave NtUserSetTimer, ret=%u\n", _ret_);
+ UserLeave();
+ TRACE("Leave NtUserSetTimer, ret=%u\n", ret);
- END_CLEANUP;
+ return ret;
}
@@ -660,18 +659,18 @@ NtUserKillTimer
)
{
PWND Window = NULL;
- DECLARE_RETURN(BOOL);
+ BOOL ret;
TRACE("Enter NtUserKillTimer\n");
UserEnterExclusive();
if (hWnd) Window = UserGetWindowObject(hWnd);
- UserLeave();
- RETURN(IntKillTimer(Window, uIDEvent, FALSE));
+ ret = IntKillTimer(Window, uIDEvent, FALSE);
-CLEANUP:
- TRACE("Leave NtUserKillTimer, ret=%i\n", _ret_);
- END_CLEANUP;
+ UserLeave();
+
+ TRACE("Leave NtUserKillTimer, ret=%i\n", ret);
+ return ret;
}
@@ -684,15 +683,17 @@ NtUserSetSystemTimer(
TIMERPROC lpTimerFunc
)
{
- DECLARE_RETURN(UINT_PTR);
+ UINT_PTR ret;
+
+ UserEnterExclusive();
+ TRACE("Enter NtUserSetSystemTimer\n");
- TRACE("Enter NtUserSetSystemTimer\n");
+ ret = IntSetTimer(UserGetWindowObject(hWnd), nIDEvent, uElapse, NULL, TMRF_SYSTEM);
- RETURN(IntSetTimer(UserGetWindowObject(hWnd), nIDEvent, uElapse, NULL, TMRF_SYSTEM));
+ UserLeave();
-CLEANUP:
- TRACE("Leave NtUserSetSystemTimer, ret=%u\n", _ret_);
- END_CLEANUP;
+ TRACE("Leave NtUserSetSystemTimer, ret=%u\n", ret);
+ return ret;
}
BOOL