stop rbtree search early if equal hash was found

This commit is contained in:
Igor Sysoev 2007-01-11 17:05:18 +00:00
parent 1279b049b4
commit e532b0194c

View File

@ -1413,7 +1413,10 @@ ngx_ssl_get_cached_session(ngx_ssl_conn_t *ssl_conn, u_char *id, int len,
continue; continue;
} }
if (hash == node->key && (u_char) len == node->data) { /* hash == node->key */
do {
if ((u_char) len == node->data) {
sess_id = (ngx_ssl_sess_id_t *) node; sess_id = (ngx_ssl_sess_id_t *) node;
if (ngx_strncmp(id, sess_id->id, len) == 0) { if (ngx_strncmp(id, sess_id->id, len) == 0) {
@ -1444,13 +1447,19 @@ ngx_ssl_get_cached_session(ngx_ssl_conn_t *ssl_conn, u_char *id, int len,
sess = NULL; sess = NULL;
break; goto done;
} }
} }
node = node->right; node = node->right;
} while (node != sentinel && hash == node->key);
break;
} }
done:
ngx_shmtx_unlock(&shpool->mutex); ngx_shmtx_unlock(&shpool->mutex);
return sess; return sess;
@ -1500,7 +1509,10 @@ ngx_ssl_remove_session(SSL_CTX *ssl, ngx_ssl_session_t *sess)
continue; continue;
} }
if (hash == node->key && len == node->data) { /* hash == node->key */
do {
if ((u_char) len == node->data) {
sess_id = (ngx_ssl_sess_id_t *) node; sess_id = (ngx_ssl_sess_id_t *) node;
if (ngx_strncmp(id, sess_id->id, (size_t) len) == 0) { if (ngx_strncmp(id, sess_id->id, (size_t) len) == 0) {
@ -1516,13 +1528,19 @@ ngx_ssl_remove_session(SSL_CTX *ssl, ngx_ssl_session_t *sess)
ngx_slab_free_locked(shpool, sess_id->id); ngx_slab_free_locked(shpool, sess_id->id);
ngx_slab_free_locked(shpool, sess_id); ngx_slab_free_locked(shpool, sess_id);
break; goto done;
} }
} }
node = node->right; node = node->right;
} while (node != sentinel && hash == node->key);
break;
} }
done:
ngx_shmtx_unlock(&shpool->mutex); ngx_shmtx_unlock(&shpool->mutex);
} }