From: Alan T. DeKok Date: Wed, 23 Nov 2016 18:10:54 +0000 (-0500) Subject: Macros to make life easier X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6aa5d83b07f15dc40b32e5251b27fb23bfb81246;p=thirdparty%2Ffreeradius-server.git Macros to make life easier --- diff --git a/src/util/time.c b/src/util/time.c index 6fff0d63801..38ba24c2d13 100644 --- a/src/util/time.c +++ b/src/util/time.c @@ -154,16 +154,13 @@ void fr_time_to_timeval(struct timeval *tv, fr_time_t when) */ void fr_time_tracking_start(fr_time_tracking_t *tt, fr_time_t when) { - fr_dlist_t *l = &(tt->list); - memset(tt, 0, sizeof(*tt)); tt->when = when; tt->start = when; tt->resumed = when; - l->prev = l; - l->next = l; + FR_DLIST_INIT(tt->list); } @@ -207,9 +204,6 @@ void fr_time_tracking_end(fr_time_tracking_t *tt, fr_time_t when, fr_time_tracki */ void fr_time_tracking_yield(fr_time_tracking_t *tt, fr_time_t when, fr_time_tracking_t *worker) { - fr_dlist_t *l = &(tt->list); - fr_dlist_t *head = &(worker->list); - tt->when = when; tt->yielded = when; @@ -217,14 +211,10 @@ void fr_time_tracking_yield(fr_time_tracking_t *tt, fr_time_t when, fr_time_trac tt->running += (tt->yielded - tt->resumed); /* - * Insert this request into the TAIL of the workers list + * Insert this request into the TAIL of the worker's list * of waiting requests. */ - l->prev = head->prev; - l->next = head; - - head->prev->next = l; - head->prev = l; + FR_DLIST_INSERT_TAIL(worker->list, tt->list); } @@ -235,8 +225,6 @@ void fr_time_tracking_yield(fr_time_tracking_t *tt, fr_time_t when, fr_time_trac */ void fr_time_tracking_resume(fr_time_tracking_t *tt, fr_time_t when) { - fr_dlist_t *l = &(tt->list); - tt->when = when; tt->resumed = when; @@ -248,9 +236,5 @@ void fr_time_tracking_resume(fr_time_tracking_t *tt, fr_time_t when) * Remove this request into the workers list of waiting * requests. */ - l->prev->next = l->next; - l->next->prev = l->prev; - - l->prev = l; - l->next = l; + FR_DLIST_REMOVE(tt->list); } diff --git a/src/util/time.h b/src/util/time.h index 0ee8c7ad6da..8e0d67e24ee 100644 --- a/src/util/time.h +++ b/src/util/time.h @@ -77,6 +77,13 @@ typedef struct fr_time_tracking_t { #define NANOSEC (1000000000) #define USEC (1000000) +/* + * Macros to manage a doubly linked list. + */ +#define FR_DLIST_INIT(head) do { head.prev = head.next = &head; } while (0) +#define FR_DLIST_INSERT_TAIL(head, entry) do { entry.prev = head.prev; entry.next = &head; head.prev->next = &entry; head.prev = &entry; } while (0) +#define FR_DLIST_REMOVE(entry) do { entry.prev->next = entry.next; entry.next->prev = entry.prev; FR_DLIST_INIT(entry); } while (0) + int fr_time_start(void); fr_time_t fr_time(void); void fr_time_to_timeval(struct timeval *tv, fr_time_t when) CC_HINT(nonnull);