Modules: Fix an integer sign bug in moduleTimerHandler (#8131)

bug was introduced in 1a91a2700b
This commit is contained in:
guybe7 2020-12-03 19:36:48 +01:00 committed by GitHub
parent 441c490024
commit 2f41a38568
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -5469,8 +5469,11 @@ int moduleTimerHandler(struct aeEventLoop *eventLoop, long long id, void *client
} else {
/* We call ustime() again instead of using the cached 'now' so that
* 'next_period' isn't affected by the time it took to execute
* previous calls to 'callback. */
next_period = (expiretime-ustime())/1000; /* Scale to milliseconds. */
* previous calls to 'callback.
* We need to cast 'expiretime' so that the compiler will not treat
* the difference as unsigned (Causing next_period to be huge) in
* case expiretime < ustime() */
next_period = ((long long)expiretime-ustime())/1000; /* Scale to milliseconds. */
break;
}
}
@ -5519,7 +5522,8 @@ RedisModuleTimerID RM_CreateTimer(RedisModuleCtx *ctx, mstime_t period, RedisMod
/* We need to install the main event loop timer if it's not already
* installed, or we may need to refresh its period if we just installed
* a timer that will expire sooner than any other else. */
* a timer that will expire sooner than any other else (i.e. the timer
* we just installed is the first timer in the Timers rax). */
if (aeTimer != -1) {
raxIterator ri;
raxStart(&ri,Timers);