diff options
| author | Igor Sysoev <igor@sysoev.ru> | 2007-12-17 08:52:00 +0000 |
|---|---|---|
| committer | Igor Sysoev <igor@sysoev.ru> | 2007-12-17 08:52:00 +0000 |
| commit | 7912e4ba5d699da3de6643a99c3076c660742f88 (patch) | |
| tree | 6ab51590f3a1b9a38aa070ae680ab8275dc74744 /src/event | |
| parent | c0cadf1f347440ee57c00527e3ba8d274dff27ff (diff) | |
| download | nginx-7912e4ba5d699da3de6643a99c3076c660742f88.tar.gz nginx-7912e4ba5d699da3de6643a99c3076c660742f88.tar.bz2 | |
optimize rbtree initialization and insert
Diffstat (limited to 'src/event')
| -rw-r--r-- | src/event/ngx_event_openssl.c | 52 | ||||
| -rw-r--r-- | src/event/ngx_event_timer.c | 5 |
2 files changed, 17 insertions, 40 deletions
diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c index be24d9c77..bd539c9a3 100644 --- a/src/event/ngx_event_openssl.c +++ b/src/event/ngx_event_openssl.c @@ -1241,11 +1241,8 @@ ngx_ssl_session_cache_init(ngx_shm_zone_t *shm_zone, void *data) return NGX_ERROR; } - ngx_rbtree_sentinel_init(sentinel); - - cache->session_rbtree->root = sentinel; - cache->session_rbtree->sentinel = sentinel; - cache->session_rbtree->insert = ngx_ssl_session_rbtree_insert_value; + ngx_rbtree_init(cache->session_rbtree, sentinel, + ngx_ssl_session_rbtree_insert_value); shm_zone->data = cache; @@ -1625,56 +1622,37 @@ static void ngx_ssl_session_rbtree_insert_value(ngx_rbtree_node_t *temp, ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel) { - ngx_ssl_sess_id_t *sess_id, *sess_id_temp; + ngx_rbtree_node_t **p; + ngx_ssl_sess_id_t *sess_id, *sess_id_temp; for ( ;; ) { if (node->key < temp->key) { - if (temp->left == sentinel) { - temp->left = node; - break; - } - - temp = temp->left; + p = &temp->left; } else if (node->key > temp->key) { - if (temp->right == sentinel) { - temp->right = node; - break; - } - - temp = temp->right; + p = &temp->right; } else { /* node->key == temp->key */ sess_id = (ngx_ssl_sess_id_t *) node; sess_id_temp = (ngx_ssl_sess_id_t *) temp; - if (ngx_memn2cmp(sess_id->id, sess_id_temp->id, - (size_t) node->data, (size_t) temp->data) - < 0) - { - if (temp->left == sentinel) { - temp->left = node; - break; - } - - temp = temp->left; - - } else { - - if (temp->right == sentinel) { - temp->right = node; - break; - } + p = (ngx_memn2cmp(sess_id->id, sess_id_temp->id, + (size_t) node->data, (size_t) temp->data) + < 0) ? &temp->left : &temp->right; + } - temp = temp->right; - } + if (*p == sentinel) { + break; } + + temp = *p; } + *p = node; node->parent = temp; node->left = sentinel; node->right = sentinel; diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c index 589de6d41..2931a9f4e 100644 --- a/src/event/ngx_event_timer.c +++ b/src/event/ngx_event_timer.c @@ -26,9 +26,8 @@ static ngx_rbtree_node_t ngx_event_timer_sentinel; ngx_int_t ngx_event_timer_init(ngx_log_t *log) { - ngx_event_timer_rbtree.root = &ngx_event_timer_sentinel; - ngx_event_timer_rbtree.sentinel = &ngx_event_timer_sentinel; - ngx_event_timer_rbtree.insert = ngx_rbtree_insert_timer_value; + ngx_rbtree_init(&ngx_event_timer_rbtree, &ngx_event_timer_sentinel, + ngx_rbtree_insert_timer_value); #if (NGX_THREADS) |
