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 }