Mercurial > hg > nginx
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; |