]> git.saurik.com Git - redis.git/commit - src/ae.h
Force expire all timer events when system clock skew is detected.
authorJokea <tfengjun@gmail.com>
Thu, 30 Aug 2012 07:08:19 +0000 (15:08 +0800)
committerantirez <antirez@gmail.com>
Thu, 4 Oct 2012 17:30:42 +0000 (19:30 +0200)
commitb7b2a1cc5eec13a714b02fc71dff3510a6b72155
treec4a4b91bb7277f7853f7a00d282f6f2a1b22e90c
parentf0b9f803455feb5565ae4b799044890aa4de1479
Force expire all timer events when system clock skew is detected.

When system time changes back, the timer will not worker properly
hence some core functionality of redis will stop working(e.g. replication,
bgsave, etc). See issue #633 for details.

The patch saves the previous time and when a system clock skew is detected,
it will force expire all timers.

Modiifed by @antirez: the previous time was moved into the eventLoop
structure to make sure the library is still thread safe as long as you
use different event loops into different threads (otherwise you need
some synchronization). More comments added about the reasoning at the
base of the patch, that's worth reporting here:

/* If the system clock is moved to the future, and then set back to the
 * right value, time events may be delayed in a random way. Often this
 * means that scheduled operations will not be performed soon enough.
 *
 * Here we try to detect system clock skews, and force all the time
 * events to be processed ASAP when this happens: the idea is that
 * processing events earlier is less dangerous than delaying them
 * indefinitely, and practice suggests it is. */
src/ae.c
src/ae.h