ПРОЕКТЫ 


  АРХИВ 


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]

Re: падение мастер процесса



Hello!

On Wed, May 16, 2012 at 01:56:27PM +0300, Polonevich Ivan wrote:

> С коллегами сделали такие выводы:
> 
> в функции ngx_shmtx_force_unlock выполняется операция atomic_cmp_set 
> без предварительной проверки инициализирован ли mtx->lock или нет. Таким
> образом если модуль выделил шаред память классическим способом но не
> использовал mutex локи для этого блока то они остаются
> неинициализрованными и при операции unlock_mutexes вызываемой по команде
> reload мы получаем segmetation_fault. добавил проверку на то
> инициализирован ли вообще mtx-lock, это снимает проблему. Насколько это
> корректно или надо править модуль. Ниже диф:

Это неправильные выводы.

При выделении разделяемой памяти через ngx_shared_memory_add() 
соответствующий lock инициализируется (см. ngx_init_zone_pool()), 
однако ustats выделенную под zone pool память (и в том числе lock) 
затирает и использует под свои нужды.

Ну и предложенный патч на ngx_shmtx.c по очевидным причинам проблему 
не вылечит, а спрячет - падать не будет ровно до того момента, как 
в соответствующую область памяти не запишут что-то, отличное от 
NULL.

Maxim Dounin

> [root@build-server nginx-1.3.0]# [root@build-server d]# diff ngx_shmtx.c
> ngx_shmtx_patched.c
> 154c154
> <     if (ngx_atomic_cmp_set(mtx->lock, pid, 0)) {
> ---
> >     if (mtx->lock ? ngx_atomic_cmp_set(mtx->lock, pid, 0): 0) {
> 
> On 5/11/12 1:14 PM, Ivan Palanevich wrote:
> > Вероятно вы правы.
> >
> > http://code.google.com/p/ustats/issues/detail?id=5
> >
> > On May 11, 2012, at 10:22 AM, Maxim Dounin wrote:
> >
> >> Hello!
> >>
> >> On Thu, May 10, 2012 at 08:36:06PM +0300, Ivan Palanevich wrote:
> >>
> >>> Заметил, что падает мастер процесс при отправке -HUP,
> >>>
> >>> cat /etc/redhat-release 
> >>> CentOS release 5.8 (Final)
> >>>
> >>> Linux server 2.6.18-308.4.1.el5 #1 SMP Tue Apr 17 17:08:00 EDT 2012 
> >>> x86_64 x86_64 x86_64 GNU/Linux
> >>>
> >>> nginx -V
> >>> nginx version: nginx/1.2.0
> >>> built by gcc 4.1.2 20080704 (Red Hat 4.1.2-52)
> >>> TLS SNI support enabled
> >>> configure arguments: --user=nginx --group=nginx --prefix=/usr/share/nginx 
> >>> --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf 
> >>> --error-log-path=/var/log/nginx/error.log 
> >>> --http-log-path=/var/log/nginx/access.log 
> >>> --http-client-body-temp-path=/var/lib/nginx/tmp/client_body 
> >>> --http-proxy-temp-path=/var/lib/nginx/tmp/proxy 
> >>> --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi 
> >>> --pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx 
> >>> --with-openssl=/home/mockbuild/rpmbuild/BUILD/nginx-1.2.0/openssl-0.9.8t/ 
> >>> --with-openssl-opt=enable-tlsext --with-http_secure_link_module 
> >>> --with-http_random_index_module --with-http_ssl_module 
> >>> --with-http_realip_module --with-http_addition_module 
> >>> --with-http_sub_module --with-http_dav_module 
> >>> --with-http_gzip_static_module --with-http_stub_status_module 
> >>> --with-http_perl_module --with-http_geoip_module --with-debug --with-ipv6 
> >>> --with-file-aio --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 
> >>> -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 
> >>> -mtune=generic' 
> >>> --add-module=/home/mockbuild/rpmbuild/BUILD/nginx-1.2.0/nginx-upstream-fair
> >>>  --add-module=/home/mockbuild/rpmbuild/BUILD/nginx-1.2.0/mod_ustats
> >>>
> >>> Из последних добавленных модификаций 
> >>> --with-openssl=/home/mockbuild/rpmbuild/BUILD/nginx-1.2.0/openssl-0.9.8t/ 
> >>>
> >>> Началось до 1.2.0 , но с какой точно версии не помню.
> >> [...]
> >>
> >>> Подскажите куда покапать.
> >> Начать с простого: собраться без сторонних модулей и патчей, и 
> >> попробовать воспроизвести проблему без них.  Я подозреваю, что 
> >> проблема где-то в районе ustats.
> >>
> >> Maxim Dounin
> >>
> >> _______________________________________________
> >> nginx-ru mailing list
> >> nginx-ru@xxxxxxxxx
> >> http://mailman.nginx.org/mailman/listinfo/nginx-ru
> 
> 
> -- 
> Signed, Polonevich Ivan
> System  Administrator 
> CООО Гейм Стрим / Wargaming.net 
> http://www.wargaming.net/
> http://www.game-stream.org/
> icq 8158401
> Skype jonilover
> 
> _______________________________________________
> nginx-ru mailing list
> nginx-ru@xxxxxxxxx
> http://mailman.nginx.org/mailman/listinfo/nginx-ru

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


 




Copyright © Lexa Software, 1996-2009.