summaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/ngx_open_file_cache.c7
-rw-r--r--src/core/ngx_rbtree.c55
2 files changed, 22 insertions, 40 deletions
diff --git a/src/core/ngx_open_file_cache.c b/src/core/ngx_open_file_cache.c
index dab98b3ff..d518f4b96 100644
--- a/src/core/ngx_open_file_cache.c
+++ b/src/core/ngx_open_file_cache.c
@@ -53,11 +53,8 @@ ngx_open_file_cache_init(ngx_pool_t *pool, ngx_uint_t max, time_t inactive)
return NULL;
}
- ngx_rbtree_sentinel_init(sentinel);
-
- cache->rbtree.root = sentinel;
- cache->rbtree.sentinel = sentinel;
- cache->rbtree.insert = ngx_open_file_cache_rbtree_insert_value;
+ ngx_rbtree_init(&cache->rbtree, sentinel,
+ ngx_open_file_cache_rbtree_insert_value);
cache->current = 0;
cache->max = max;
diff --git a/src/core/ngx_rbtree.c b/src/core/ngx_rbtree.c
index 0a5753cdf..7ee0036ec 100644
--- a/src/core/ngx_rbtree.c
+++ b/src/core/ngx_rbtree.c
@@ -97,28 +97,20 @@ void
ngx_rbtree_insert_value(ngx_rbtree_node_t *temp, ngx_rbtree_node_t *node,
ngx_rbtree_node_t *sentinel)
{
- for ( ;; ) {
-
- if (node->key < temp->key) {
-
- if (temp->left == sentinel) {
- temp->left = node;
- break;
- }
-
- temp = temp->left;
+ ngx_rbtree_node_t **p;
- } else {
+ for ( ;; ) {
- if (temp->right == sentinel) {
- temp->right = node;
- break;
- }
+ p = (node->key < temp->key) ? &temp->left : &temp->right;
- temp = temp->right;
+ if (*p == sentinel) {
+ break;
}
+
+ temp = *p;
}
+ *p = node;
node->parent = temp;
node->left = sentinel;
node->right = sentinel;
@@ -130,6 +122,8 @@ void
ngx_rbtree_insert_timer_value(ngx_rbtree_node_t *temp, ngx_rbtree_node_t *node,
ngx_rbtree_node_t *sentinel)
{
+ ngx_rbtree_node_t **p;
+
for ( ;; ) {
/*
@@ -139,29 +133,20 @@ ngx_rbtree_insert_timer_value(ngx_rbtree_node_t *temp, ngx_rbtree_node_t *node,
* The comparison takes into account that overflow.
*/
- if ((ngx_rbtree_key_int_t) node->key - (ngx_rbtree_key_int_t) temp->key
- < 0)
- {
- /* node->key < temp->key */
-
- if (temp->left == sentinel) {
- temp->left = node;
- break;
- }
+ /* node->key < temp->key */
- temp = temp->left;
-
- } else {
+ p = ((ngx_rbtree_key_int_t) node->key - (ngx_rbtree_key_int_t) temp->key
+ < 0)
+ ? &temp->left : &temp->right;
- if (temp->right == sentinel) {
- temp->right = node;
- break;
- }
-
- temp = temp->right;
+ if (*p == sentinel) {
+ break;
}
- }
+ temp = *p;
+ }
+
+ *p = node;
node->parent = temp;
node->left = sentinel;
node->right = sentinel;