]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Macros to make life easier
authorAlan T. DeKok <aland@freeradius.org>
Wed, 23 Nov 2016 18:10:54 +0000 (13:10 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 24 Nov 2016 23:14:07 +0000 (18:14 -0500)
src/util/time.c
src/util/time.h

index 6fff0d63801e415f9107117ea6adf428b3fd3667..38ba24c2d131ade27ae1fdd58f4688d852477183 100644 (file)
@@ -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);
 }
index 0ee8c7ad6da34a4185afa5480288fc14766b3a08..8e0d67e24ee999703502a647dc25d054dfad72f4 100644 (file)
@@ -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);