summaryrefslogtreecommitdiff
path: root/src/ae.h
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2016-01-08 15:05:14 +0100
committerantirez <antirez@gmail.com>2016-04-04 08:50:58 +0200
commit67b70a18130bb22663494689b19db5b47cfed4fd (patch)
tree03ab95bc7f097dc2db65adf679d6b2969117a156 /src/ae.h
parent28c291c55c35b8acaedffbb7eb98b3fc175e1237 (diff)
downloadredis-67b70a18130bb22663494689b19db5b47cfed4fd.tar.gz
Fix ae.c to avoid timers infinite loop.
This fix was suggested by Anthony LaTorre, that provided also a good test case that was used to verify the fix. The problem with the old implementation is that, the time returned by a timer event (that is the time after it want to run again) is added to the event *start time*. So if the event takes, in order to run, more than the time it says it want to be scheduled again for running, an infinite loop is triggered.
Diffstat (limited to 'src/ae.h')
-rw-r--r--src/ae.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/ae.h b/src/ae.h
index 15ca1b5e7..827c4c9e4 100644
--- a/src/ae.h
+++ b/src/ae.h
@@ -33,6 +33,8 @@
#ifndef __AE_H__
#define __AE_H__
+#include <time.h>
+
#define AE_OK 0
#define AE_ERR -1
@@ -46,6 +48,7 @@
#define AE_DONT_WAIT 4
#define AE_NOMORE -1
+#define AE_DELETED_EVENT_ID -1
/* Macros */
#define AE_NOTUSED(V) ((void) V)