nginx worker process 3964 exited on signal 11

Maxim Dounin mdounin на mdounin.ru
Пн Фев 22 03:31:47 MSK 2010


Hello!

On Mon, Feb 22, 2010 at 12:58:34AM +0300, Igor Sysoev wrote:

> On Mon, Feb 22, 2010 at 12:45:23AM +0300, Maxim Dounin wrote:
> 
> > Hello!
> > 
> > On Sun, Feb 21, 2010 at 02:33:25PM +0300, Peter Leonov wrote:
> > 
> > > On 21.02.2010, at 13:59, Igor Sysoev <igor at sysoev.ru> wrote:
> > > 
> > > >On Sun, Feb 21, 2010 at 01:48:36PM +0300, Дугин Сергей wrote:
> > > >
> > > >>Здравствуйте, .
> > > >>
> > > >>Как с этим бороться?
> > > >>
> > > >…
> > > >Вот что с людьми делает долгое и неконтроллируемое употребление
> > > >.htaccess/mod_rewite. Мозг перестаёт понимать, что существуют другие
> > > >методы решения задач:
> > > >
> > > >http://sysoev.ru/nginx/docs/http/ngx_http_geo_module.html
> > > >и
> > > >  if ($geo) {
> > > >      rewrite  ^  http://aaaaaaa.ru/bbbbb/cccccc/$uri  last;
> > > >  }
> > > 
> > > Это да :)
> > > 
> > > Но, ведь, и сегфолта быть не должно.
> > 
> > В 0.8.25+ его и не будет.
> 
> Почему ? Тут же не named captures.

Потому что в 0.8.25 ты переделал работу с regexp'ами, и 
pcre_exec() в новом коде зовётся с правильным размером ovecsize.

Проблема была вот в этом коде (ngx_http_script.c):

    if (code->ncaptures && r->captures == NULL) {

        r->captures = ngx_palloc(r->pool,
                                 (NGX_HTTP_MAX_CAPTURES + 1) * 3 * sizeof(int));
        if (r->captures == NULL) {
            e->ip = ngx_http_script_exit;
            e->status = NGX_HTTP_INTERNAL_SERVER_ERROR;
            return;
        }
    }

    rc = ngx_regex_exec(code->regex, &e->line, r->captures, code->ncaptures);

где code->ncaptures - количество captures в конкретном регулярном 
выражении (в оригинальном примере топикстартера - 132 штук), а 
место под r->captures выделяется под (NGX_HTTP_MAX_CAPTURES + 1) 
== 10 штук.

Maxim Dounin



Подробная информация о списке рассылки nginx-ru