summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Ahern <[email protected]>2016-02-24 10:32:17 -0800
committerWilliam Ahern <[email protected]>2016-02-24 10:32:17 -0800
commit1aa993e3f85abeb737a15e596ef0aab20f00b560 (patch)
tree1379b6060a7b4b252e3ce24cb396d521f13056e7
parent825de345e97f751033613cba059e7e7990e6e79d (diff)
parent5ecfc012befdb577fdbaf6e6c74ca55b6ce6c26e (diff)
Merge branch 'nmathewson-optional_timeout_ptr'
-rw-r--r--timeout.c15
-rw-r--r--timeout.h5
2 files changed, 15 insertions, 5 deletions
diff --git a/timeout.c b/timeout.c
index eb72bc1..7140db4 100644
--- a/timeout.c
+++ b/timeout.c
@@ -43,6 +43,11 @@
#include "debug.h"
#endif
+#ifdef TIMEOUT_DISABLE_RELATIVE_ACCESS
+#define TO_SET_TIMEOUTS(to, T) ((void)0)
+#else
+#define TO_SET_TIMEOUTS(to, T) ((to)->timeouts = (T))
+#endif
/*
* A N C I L L A R Y R O U T I N E S
@@ -260,7 +265,7 @@ static void timeouts_reset(struct timeouts *T) {
TAILQ_CONCAT(&reset, &T->expired, tqe);
TAILQ_FOREACH(to, &reset, tqe) {
- to->timeouts = NULL;
+ TO_SET_TIMEOUTS(to, NULL);
to->pending = NULL;
}
} /* timeouts_reset() */
@@ -295,7 +300,7 @@ TIMEOUT_PUBLIC void timeouts_del(struct timeouts *T, struct timeout *to) {
}
to->pending = NULL;
- to->timeouts = NULL;
+ TO_SET_TIMEOUTS(to, NULL);
}
} /* timeouts_del() */
@@ -324,7 +329,7 @@ static void timeouts_sched(struct timeouts *T, struct timeout *to, timeout_t exp
to->expires = expires;
- to->timeouts = T;
+ TO_SET_TIMEOUTS(to, T);
if (expires > T->curtime) {
rem = timeout_rem(T, to);
@@ -547,7 +552,7 @@ TIMEOUT_PUBLIC struct timeout *timeouts_get(struct timeouts *T) {
if ((to->flags & TIMEOUT_INT) && to->interval > 0) {
timeouts_readd(T, to);
} else {
- to->timeouts = 0;
+ TO_SET_TIMEOUTS(to, NULL);
}
return to;
@@ -686,6 +691,7 @@ TIMEOUT_PUBLIC struct timeout *timeout_init(struct timeout *to, int flags) {
} /* timeout_init() */
+#ifndef TIMEOUT_DISABLE_RELATIVE_ACCESS
TIMEOUT_PUBLIC bool timeout_pending(struct timeout *to) {
return to->pending && to->pending != &to->timeouts->expired;
} /* timeout_pending() */
@@ -699,6 +705,7 @@ TIMEOUT_PUBLIC bool timeout_expired(struct timeout *to) {
TIMEOUT_PUBLIC void timeout_del(struct timeout *to) {
timeouts_del(to->timeouts, to);
} /* timeout_del() */
+#endif
/*
diff --git a/timeout.h b/timeout.h
index 5c82753..2b9de23 100644
--- a/timeout.h
+++ b/timeout.h
@@ -119,8 +119,10 @@ struct timeout {
timeout_t expires;
/* absolute expiration time */
+#ifndef TIMEOUT_DISABLE_RELATIVE_ACCESS
struct timeouts *timeouts;
/* timeouts collection if member of */
+#endif
struct timeout_list *pending;
/* timeout list if pending on wheel or expiry queue */
@@ -136,6 +138,7 @@ struct timeout {
TIMEOUT_PUBLIC struct timeout *timeout_init(struct timeout *, int);
/* initialize timeout structure (same as TIMEOUT_INITIALIZER) */
+#ifndef TIMEOUT_DISABLE_RELATIVE_ACCESS
TIMEOUT_PUBLIC bool timeout_pending(struct timeout *);
/* true if on timing wheel, false otherwise */
@@ -144,7 +147,7 @@ TIMEOUT_PUBLIC bool timeout_expired(struct timeout *);
TIMEOUT_PUBLIC void timeout_del(struct timeout *);
/* remove timeout from any timing wheel (okay if not member of any) */
-
+#endif
/*
* T I M I N G W H E E L I N T E R F A C E S