Commit 5ecfc012 authored by William Ahern's avatar William Ahern

Merge branch 'optional_timeout_ptr' of git://github.com/nmathewson/timeout...

Merge branch 'optional_timeout_ptr' of git://github.com/nmathewson/timeout into nmathewson-optional_timeout_ptr
parents 825de345 e7c5a9e0
...@@ -43,6 +43,11 @@ ...@@ -43,6 +43,11 @@
#include "debug.h" #include "debug.h"
#endif #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 * 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) { ...@@ -260,7 +265,7 @@ static void timeouts_reset(struct timeouts *T) {
TAILQ_CONCAT(&reset, &T->expired, tqe); TAILQ_CONCAT(&reset, &T->expired, tqe);
TAILQ_FOREACH(to, &reset, tqe) { TAILQ_FOREACH(to, &reset, tqe) {
to->timeouts = NULL; TO_SET_TIMEOUTS(to, NULL);
to->pending = NULL; to->pending = NULL;
} }
} /* timeouts_reset() */ } /* timeouts_reset() */
...@@ -295,7 +300,7 @@ TIMEOUT_PUBLIC void timeouts_del(struct timeouts *T, struct timeout *to) { ...@@ -295,7 +300,7 @@ TIMEOUT_PUBLIC void timeouts_del(struct timeouts *T, struct timeout *to) {
} }
to->pending = NULL; to->pending = NULL;
to->timeouts = NULL; TO_SET_TIMEOUTS(to, NULL);
} }
} /* timeouts_del() */ } /* timeouts_del() */
...@@ -324,7 +329,7 @@ static void timeouts_sched(struct timeouts *T, struct timeout *to, timeout_t exp ...@@ -324,7 +329,7 @@ static void timeouts_sched(struct timeouts *T, struct timeout *to, timeout_t exp
to->expires = expires; to->expires = expires;
to->timeouts = T; TO_SET_TIMEOUTS(to, T);
if (expires > T->curtime) { if (expires > T->curtime) {
rem = timeout_rem(T, to); rem = timeout_rem(T, to);
...@@ -547,7 +552,7 @@ TIMEOUT_PUBLIC struct timeout *timeouts_get(struct timeouts *T) { ...@@ -547,7 +552,7 @@ TIMEOUT_PUBLIC struct timeout *timeouts_get(struct timeouts *T) {
if ((to->flags & TIMEOUT_INT) && to->interval > 0) { if ((to->flags & TIMEOUT_INT) && to->interval > 0) {
timeouts_readd(T, to); timeouts_readd(T, to);
} else { } else {
to->timeouts = 0; TO_SET_TIMEOUTS(to, NULL);
} }
return to; return to;
...@@ -686,6 +691,7 @@ TIMEOUT_PUBLIC struct timeout *timeout_init(struct timeout *to, int flags) { ...@@ -686,6 +691,7 @@ TIMEOUT_PUBLIC struct timeout *timeout_init(struct timeout *to, int flags) {
} /* timeout_init() */ } /* timeout_init() */
#ifndef TIMEOUT_DISABLE_RELATIVE_ACCESS
TIMEOUT_PUBLIC bool timeout_pending(struct timeout *to) { TIMEOUT_PUBLIC bool timeout_pending(struct timeout *to) {
return to->pending && to->pending != &to->timeouts->expired; return to->pending && to->pending != &to->timeouts->expired;
} /* timeout_pending() */ } /* timeout_pending() */
...@@ -699,6 +705,7 @@ TIMEOUT_PUBLIC bool timeout_expired(struct timeout *to) { ...@@ -699,6 +705,7 @@ TIMEOUT_PUBLIC bool timeout_expired(struct timeout *to) {
TIMEOUT_PUBLIC void timeout_del(struct timeout *to) { TIMEOUT_PUBLIC void timeout_del(struct timeout *to) {
timeouts_del(to->timeouts, to); timeouts_del(to->timeouts, to);
} /* timeout_del() */ } /* timeout_del() */
#endif
/* /*
......
...@@ -119,8 +119,10 @@ struct timeout { ...@@ -119,8 +119,10 @@ struct timeout {
timeout_t expires; timeout_t expires;
/* absolute expiration time */ /* absolute expiration time */
#ifndef TIMEOUT_DISABLE_RELATIVE_ACCESS
struct timeouts *timeouts; struct timeouts *timeouts;
/* timeouts collection if member of */ /* timeouts collection if member of */
#endif
struct timeout_list *pending; struct timeout_list *pending;
/* timeout list if pending on wheel or expiry queue */ /* timeout list if pending on wheel or expiry queue */
...@@ -136,6 +138,7 @@ struct timeout { ...@@ -136,6 +138,7 @@ struct timeout {
TIMEOUT_PUBLIC struct timeout *timeout_init(struct timeout *, int); TIMEOUT_PUBLIC struct timeout *timeout_init(struct timeout *, int);
/* initialize timeout structure (same as TIMEOUT_INITIALIZER) */ /* initialize timeout structure (same as TIMEOUT_INITIALIZER) */
#ifndef TIMEOUT_DISABLE_RELATIVE_ACCESS
TIMEOUT_PUBLIC bool timeout_pending(struct timeout *); TIMEOUT_PUBLIC bool timeout_pending(struct timeout *);
/* true if on timing wheel, false otherwise */ /* true if on timing wheel, false otherwise */
...@@ -144,7 +147,7 @@ TIMEOUT_PUBLIC bool timeout_expired(struct timeout *); ...@@ -144,7 +147,7 @@ TIMEOUT_PUBLIC bool timeout_expired(struct timeout *);
TIMEOUT_PUBLIC void timeout_del(struct timeout *); TIMEOUT_PUBLIC void timeout_del(struct timeout *);
/* remove timeout from any timing wheel (okay if not member of any) */ /* 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 * T I M I N G W H E E L I N T E R F A C E S
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment