Welcome! Log In Create A New Profile

Advanced

RE: A possible bug in ngx_rbtree

YongFeng Wu
October 02, 2012 11:10AM
Hi Maxim,

Thank you so much for looking into it:

Following is the nginx -V output:

nginx version: nginx/1.2.3
built by gcc 4.2.1 20070719 [FreeBSD]
configure arguments: --with-pcre --with-debug --with-http_geoip_module
--with-http_stub_status_module

Following is the content for cache, cache->rbtree, root and sentinel:

(gdb) p cache
$5 = (ngx_open_file_cache_t *) 0x8012495f8
(gdb) p *cache
$6 = {rbtree = {root = 0x803377580, sentinel = 0x801249610, insert =
0x423ba0 <ngx_open_file_cache_rbtree_insert_value>}, sentinel = {
key = 0, left = 0x0, right = 0x0, parent = 0x8044d4100, color = 0 '\0',
data = 0 '\0'}, expire_queue = {prev = 0x8044d4ba8,
next = 0x803376228}, current = 999, max = 1000, inactive = 60}
(gdb) p cache->rbtree
$7 = {root = 0x803377580, sentinel = 0x801249610, insert = 0x423ba0
<ngx_open_file_cache_rbtree_insert_value>}
(gdb) p *cache->rbtree->root
$8 = {key = 2661524630, left = 0x801230100, right = 0x8032b4100, parent =
0x0, color = 0 '\0', data = 46 '.'}
(gdb) p cache->sentinel
$9 = {key = 0, left = 0x0, right = 0x0, parent = 0x8044d4100, color = 0
'\0', data = 0 '\0'}
(gdb) p
*cache->sentinel->parent->parent->parent->parent->parent->parent->parent->pa
rent
$10 = {key = 3464485871, left = 0x803b35680, right = 0x8032b4d00, parent =
0x803377580, color = 0 '\0', data = 0 '\0'}
(gdb) p
*cache->sentinel->parent->parent->parent->parent->parent->parent->parent->pa
rent->parent
$11 = {key = 2661524630, left = 0x801230100, right = 0x8032b4100, parent =
0x0, color = 0 '\0', data = 46 '.'}

One thing weird is that the sentinel->parent is not null but set to a node.
Could this cause some problems? sentinel->parent could be set in code like
(function ngx_rbtree_delete, line 209 in ngx_rbtree.c, version 1.2.3):

if (subst == node) {

temp->parent = subst->parent;

} else {


Again, thank you for your help.

Yongfeng Wu


-----Original Message-----
From: Maxim Dounin [mailto:mdounin@mdounin.ru]
Sent: Tuesday, October 02, 2012 9:00 AM
To: nginx-devel@nginx.org; ywu@about.com
Subject: Re: A possible bug in ngx_rbtree

Hello!

On Fri, Sep 28, 2012 at 11:01:12AM -0400, YongFeng Wu wrote:

> Hi,
>
>
>
> We just found a worker process was stuck in an infinite loop, in
> function ngx_open_file_lookup(). Checking the open file cache RB tree
> with GDB shows the following:
>
>
>
> (gdb) p cache->rbtree.root->right
>
> $3 = (ngx_rbtree_node_t *) 0x80122f900
>
> (gdb) p cache->rbtree.root->right->right
>
> $4 = (ngx_rbtree_node_t *) 0x8040ea400
>
> (gdb) p cache->rbtree.root->right->right->left
>
> $5 = (ngx_rbtree_node_t *) 0x801236980
>
>
>
> (gdb) p cache->rbtree.root->right->right->left->right
>
> $6 = (ngx_rbtree_node_t *) 0x8090ee080
>
> (gdb) p cache->rbtree.root->right->right->left->right->right
>
> $7 = (ngx_rbtree_node_t *) 0x804aab280
>
> (gdb) p cache->rbtree.root->right->right->left->right->right->left
>
> $8 = (ngx_rbtree_node_t *) 0x804aabf00

[...]

> That means the $9 == $9->parent->parent->parent, so the infinite loop.
>
> I think there might be a bug in ngx_rbtree.c. I'll really appreciate
> it if somebody can look into it.

I've looked though code again and don't see any obvious problems.

Could you please provide more details? It would be helpful to see "nginx
-V" output, and to make sure there are no 3rd party modules/patches. It
might be also helpful to look at "cache", "*cache" and "cache->rbtree", in
particular at root and sentinel addresses, as the best guess for now is some
memory corruption. Stack trace might be also helpful.

--
Maxim Dounin
http://nginx.com/support.html

_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

A possible bug in ngx_rbtree

YongFeng Wu 1089 September 28, 2012 11:02AM

Re: A possible bug in ngx_rbtree

Maxim Dounin 498 October 02, 2012 09:02AM

RE: A possible bug in ngx_rbtree

YongFeng Wu 485 October 02, 2012 11:10AM

Re: A possible bug in ngx_rbtree

Maxim Dounin 561 October 02, 2012 12:30PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 157
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready