Mercurial > hg > nginx-quic
comparison src/core/ngx_resolver.c @ 3143:ab6258e18099
fix resolver cache rbtree comparison
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sat, 19 Sep 2009 16:15:13 +0000 |
parents | 5f6144fc674d |
children | f0d596e84634 |
comparison
equal
deleted
inserted
replaced
3142:959fa3a11b03 | 3143:ab6258e18099 |
---|---|
1597 | 1597 |
1598 static ngx_resolver_node_t * | 1598 static ngx_resolver_node_t * |
1599 ngx_resolver_lookup_name(ngx_resolver_t *r, ngx_str_t *name, uint32_t hash) | 1599 ngx_resolver_lookup_name(ngx_resolver_t *r, ngx_str_t *name, uint32_t hash) |
1600 { | 1600 { |
1601 ngx_int_t rc; | 1601 ngx_int_t rc; |
1602 size_t len; | |
1603 ngx_rbtree_node_t *node, *sentinel; | 1602 ngx_rbtree_node_t *node, *sentinel; |
1604 ngx_resolver_node_t *rn; | 1603 ngx_resolver_node_t *rn; |
1605 | 1604 |
1606 node = r->name_rbtree.root; | 1605 node = r->name_rbtree.root; |
1607 sentinel = r->name_rbtree.sentinel; | 1606 sentinel = r->name_rbtree.sentinel; |
1621 /* hash == node->key */ | 1620 /* hash == node->key */ |
1622 | 1621 |
1623 do { | 1622 do { |
1624 rn = (ngx_resolver_node_t *) node; | 1623 rn = (ngx_resolver_node_t *) node; |
1625 | 1624 |
1626 len = (name->len > (size_t) rn->nlen) ? rn->nlen : name->len; | 1625 rc = ngx_memn2cmp(name->data, rn->name, name->len, rn->nlen); |
1627 | |
1628 rc = ngx_strncmp(name->data, rn->name, len); | |
1629 | 1626 |
1630 if (rc == 0) { | 1627 if (rc == 0) { |
1631 return rn; | 1628 return rn; |
1632 } | 1629 } |
1633 | 1630 |
1677 | 1674 |
1678 static void | 1675 static void |
1679 ngx_resolver_rbtree_insert_value(ngx_rbtree_node_t *temp, | 1676 ngx_resolver_rbtree_insert_value(ngx_rbtree_node_t *temp, |
1680 ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel) | 1677 ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel) |
1681 { | 1678 { |
1682 size_t len; | |
1683 ngx_rbtree_node_t **p; | 1679 ngx_rbtree_node_t **p; |
1684 ngx_resolver_node_t *rn, *rn_temp; | 1680 ngx_resolver_node_t *rn, *rn_temp; |
1685 | 1681 |
1686 for ( ;; ) { | 1682 for ( ;; ) { |
1687 | 1683 |
1696 } else { /* node->key == temp->key */ | 1692 } else { /* node->key == temp->key */ |
1697 | 1693 |
1698 rn = (ngx_resolver_node_t *) node; | 1694 rn = (ngx_resolver_node_t *) node; |
1699 rn_temp = (ngx_resolver_node_t *) temp; | 1695 rn_temp = (ngx_resolver_node_t *) temp; |
1700 | 1696 |
1701 len = (rn->nlen > rn_temp->nlen) ? rn_temp->nlen : rn->nlen; | 1697 p = (ngx_memn2cmp(rn->name, rn_temp->name, rn->nlen, rn_temp->nlen) |
1702 | 1698 < 0) ? &temp->left : &temp->right; |
1703 p = (ngx_strncmp(rn->name, rn_temp->name, len) < 0) | |
1704 ? &temp->left : &temp->right; | |
1705 } | 1699 } |
1706 | 1700 |
1707 if (*p == sentinel) { | 1701 if (*p == sentinel) { |
1708 break; | 1702 break; |
1709 } | 1703 } |