comparison src/http/ngx_http_file_cache.c @ 4515:8bb695c05870 stable-1.0

Merge of r4498: Fix of rbtree lookup on hash collisions. Previous code incorrectly assumed that nodes with identical keys are linked together. This might not be true after tree rebalance. Patch by Lanshun Zhou.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 05 Mar 2012 13:17:56 +0000
parents 4919fb357a5d
children
comparison
equal deleted inserted replaced
4514:79142134d616 4515:8bb695c05870
671 continue; 671 continue;
672 } 672 }
673 673
674 /* node_key == node->key */ 674 /* node_key == node->key */
675 675
676 do { 676 fcn = (ngx_http_file_cache_node_t *) node;
677 fcn = (ngx_http_file_cache_node_t *) node; 677
678 678 rc = ngx_memcmp(&key[sizeof(ngx_rbtree_key_t)], fcn->key,
679 rc = ngx_memcmp(&key[sizeof(ngx_rbtree_key_t)], fcn->key, 679 NGX_HTTP_CACHE_KEY_LEN - sizeof(ngx_rbtree_key_t));
680 NGX_HTTP_CACHE_KEY_LEN - sizeof(ngx_rbtree_key_t)); 680
681 681 if (rc == 0) {
682 if (rc == 0) { 682 return fcn;
683 return fcn; 683 }
684 } 684
685 685 node = (rc < 0) ? node->left : node->right;
686 node = (rc < 0) ? node->left : node->right;
687
688 } while (node != sentinel && node_key == node->key);
689
690 break;
691 } 686 }
692 687
693 /* not found */ 688 /* not found */
694 689
695 return NULL; 690 return NULL;