https://git.reactos.org/?p=reactos.git;a=commitdiff;h=fd327db20ffd249bcdb3900a9806e379b5998f16
commit fd327db20ffd249bcdb3900a9806e379b5998f16 Author: Tomáš Veselý <turic...@gmail.com> AuthorDate: Tue Aug 27 08:14:51 2024 +0200 Commit: GitHub <nore...@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.he...@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();