ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

segfault nginx1.3.8 + http-push-stream-module


  • To: nginx-ru@xxxxxxxxx
  • Subject: segfault nginx1.3.8 + http-push-stream-module
  • From: "Gelun, Artem" <a@xxxxxxxx>
  • Date: Wed, 24 Apr 2013 18:46:23 +0400

День добрый всем.

Столкнулся с проблемой в работе стороннего модуля nginx-http-push-stream-module. Периодически nginx сегфолтится (при том периоды, судя по всему, зависят от аптайма процесса и нагрузки на модуль)

Вопроса два:
1) сталкивался ли кто?
2) определить где именно проблема.

При поптыке разобрать причины падения возник вопрос по реализации rbtree. Сразу скажу, что я не большой спец в алгоритмах и прошу палками не бить ))

Смысл вот в чём. nginx падает с таким бектрейсом:

(gdb) bt
#0  0x000000000040f6bc in ngx_rbtree_delete (tree=0x7f56ba655000, node=<value optimized out>) at src/core/ngx_rbtree.c:300
#1  0x000000000047bb3f in ngx_http_push_stream_collect_expired_messages_and_empty_channels (data="" shpool=0x7f56ba4d7000, 
    force=<value optimized out>) at /usr/src/redhat/SOURCES/nginx/nginx-push-stream-module/src/ngx_http_push_stream_module_utils.c:733
#2  0x000000000047bc34 in ngx_http_push_stream_memory_cleanup (ev=<value optimized out>)
    at /usr/src/redhat/SOURCES/nginx/nginx-push-stream-module/src/ngx_http_push_stream_module_utils.c:810
#3  ngx_http_push_stream_memory_cleanup_timer_wake_handler (ev=<value optimized out>)
    at /usr/src/redhat/SOURCES/nginx/nginx-push-stream-module/src/ngx_http_push_stream_module_utils.c:980
#4  0x000000000041cb8c in ngx_event_expire_timers () at src/event/ngx_event_timer.c:149
#5  0x000000000041c97f in ngx_process_events_and_timers (cycle=0xeeb330) at src/event/ngx_event.c:263
#6  0x0000000000422b58 in ngx_worker_process_cycle (cycle=0xeeb330, data="" optimized out>) at src/os/unix/ngx_process_cycle.c:810
#7  0x0000000000421147 in ngx_spawn_process (cycle=0xeeb330, proc=0x422a90 <ngx_worker_process_cycle>, data="" name=0x47ffb9 "worker process", 
    respawn=-4) at src/os/unix/ngx_process.c:198
#8  0x0000000000422112 in ngx_start_worker_processes (cycle=0xeeb330, n=4, type=-4) at src/os/unix/ngx_process_cycle.c:365
#9  0x000000000042331d in ngx_master_process_cycle (cycle=0xeeb330) at src/os/unix/ngx_process_cycle.c:250
#10 0x000000000040787b in main (argc=<value optimized out>, argv=<value optimized out>) at src/core/nginx.c:412

(gdb) list
295                ngx_rbt_red(temp->parent);
296                ngx_rbtree_right_rotate(root, sentinel, temp->parent);
297                w = temp->parent->left;
298            }
299
300            if (ngx_rbt_is_black(w->left) && ngx_rbt_is_black(w->right)) {
301                ngx_rbt_red(w);
302                temp = temp->parent;
303
304            } else {


В строке 300 ngx_rbt_is_black - в него нельзя передать "0":

#define ngx_rbt_is_red(node)            ((node)->color)
#define ngx_rbt_is_black(node)          (!ngx_rbt_is_red(node)) 

При этом, 

(gdb) p *w
$1 = {key = 0, left = 0x0, right = 0x0, parent = 0x7f56bb2aa200, color = 0 '\000', data = 0 '\000'}

(gdb) p *sentinel
$5 = {key = 0, left = 0x0, right = 0x0, parent = 0x7f56bb2aa200, color = 0 '\000', data = 0 '\000'}

(gdb) p w==sentinel
$27 = 1

Помогите разобраться, это особенность реализации rbtree в nginx'е и ошибка в модуле (где-то как-то неправильно заполняют структуру?) или же это недочёт реализации и проблема в самом nginx'е? ))

Заранее спасибо.

Артём.

P.S. Могу, при необходимости, выложить куда-то coredump , бинарник с дебагсимволами и исходники, с которых компилировалось.


_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.