]> git.kaiwu.me - nginx.git/commitdiff
Core: added the ngx_rbtree_data() macro.
authorVladimir Homutov <vl@nginx.com>
Mon, 21 Jun 2021 06:42:43 +0000 (09:42 +0300)
committerVladimir Homutov <vl@nginx.com>
Mon, 21 Jun 2021 06:42:43 +0000 (09:42 +0300)
src/core/ngx_rbtree.h
src/core/ngx_resolver.c
src/event/ngx_event_timer.c

index 97f0e3e1183b336cc8b9d4089af8507a42ceef51..e8c3582139a3baa12edbfe0ccd615653b6f81f11 100644 (file)
@@ -47,6 +47,9 @@ struct ngx_rbtree_s {
     (tree)->sentinel = s;                                                     \
     (tree)->insert = i
 
+#define ngx_rbtree_data(node, type, link)                                     \
+    (type *) ((u_char *) (node) - offsetof(type, link))
+
 
 void ngx_rbtree_insert(ngx_rbtree_t *tree, ngx_rbtree_node_t *node);
 void ngx_rbtree_delete(ngx_rbtree_t *tree, ngx_rbtree_node_t *node);
index 58d5f3ec45dc4984c2b1fd7bd5ff29ff98ca67a8..6d129e56aff9bbe64f34125d6045f8c0ec6d485f 100644 (file)
@@ -51,9 +51,7 @@ typedef struct {
 } ngx_resolver_an_t;
 
 
-#define ngx_resolver_node(n)                                                 \
-    (ngx_resolver_node_t *)                                                  \
-        ((u_char *) (n) - offsetof(ngx_resolver_node_t, node))
+#define ngx_resolver_node(n)  ngx_rbtree_data(n, ngx_resolver_node_t, node)
 
 
 static ngx_int_t ngx_udp_connect(ngx_resolver_connection_t *rec);
index 698b88faeca088e672e738d61b88e73484793903..35052bc294bd4373982c4bf954f15050e909803b 100644 (file)
@@ -73,7 +73,7 @@ ngx_event_expire_timers(void)
             return;
         }
 
-        ev = (ngx_event_t *) ((char *) node - offsetof(ngx_event_t, timer));
+        ev = ngx_rbtree_data(node, ngx_event_t, timer);
 
         ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
                        "event timer del: %d: %M",
@@ -113,7 +113,7 @@ ngx_event_no_timers_left(void)
          node;
          node = ngx_rbtree_next(&ngx_event_timer_rbtree, node))
     {
-        ev = (ngx_event_t *) ((char *) node - offsetof(ngx_event_t, timer));
+        ev = ngx_rbtree_data(node, ngx_event_t, timer);
 
         if (!ev->cancelable) {
             return NGX_AGAIN;