https://git.reactos.org/?p=reactos.git;a=commitdiff;h=fd327db20ffd249bcdb390...
commit fd327db20ffd249bcdb3900a9806e379b5998f16 Author: Tomáš Veselý turican0@gmail.com AuthorDate: Tue Aug 27 08:14:51 2024 +0200 Commit: GitHub noreply@github.com CommitDate: Tue Aug 27 01:14:51 2024 -0500
[NTUSER] IntSetTimer: Update HintIndex on each call (#7087)
* fix CORE-9141 - adding a change to IDEvent after each pass If the first index is 0 the first returned ID will be 0x8000, which is fine. Co-authored-by: Joachim Henze joachim.henze@reactos.org --- win32ss/user/ntuser/timer.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/win32ss/user/ntuser/timer.c b/win32ss/user/ntuser/timer.c index 4a9fd3c44ae..6d4a4e983be 100644 --- a/win32ss/user/ntuser/timer.c +++ b/win32ss/user/ntuser/timer.c @@ -19,10 +19,12 @@ static LONG TimeLast = 0; /* Windows 2000 has room for 32768 window-less timers */ #define NUM_WINDOW_LESS_TIMERS 32768
+#define HINTINDEX_BEGIN_VALUE 0 + static PFAST_MUTEX Mutex; static RTL_BITMAP WindowLessTimersBitMap; static PVOID WindowLessTimersBitMapBuffer; -static ULONG HintIndex = 1; +static ULONG HintIndex = HINTINDEX_BEGIN_VALUE;
ERESOURCE TimerLock;
@@ -219,8 +221,12 @@ IntSetTimer( PWND Window, { IntLockWindowlessTimerBitmap();
- IDEvent = RtlFindClearBitsAndSet(&WindowLessTimersBitMap, 1, HintIndex); - + IDEvent = RtlFindClearBitsAndSet(&WindowLessTimersBitMap, 1, HintIndex++); + if (IDEvent == (UINT_PTR)-1) + { + HintIndex = HINTINDEX_BEGIN_VALUE; + IDEvent = RtlFindClearBitsAndSet(&WindowLessTimersBitMap, 1, HintIndex++); + } if (IDEvent == (UINT_PTR) -1) { IntUnlockWindowlessTimerBitmap();