http_push_module

pyromaniac - kinwizard на gmail.com
Ср Янв 27 13:36:01 MSK 2010


В общем, url->data = 0 Из-за этого и падает. Не понятно, почему ngx_palloc
не срабатывает. Использование r->pool вместо ngx_http_push_pool даёт
возможность 1 раз вывести информацию, на второй раз падает с теми же
симптомами.
Александре, а где можно почитать про ngx_shmtx_lock? Что это за зверь такой?
Он лочит тред, насколько я понимаю?

27 января 2010 г. 12:34 пользователь Alexandre Kalendarev
<akalend на mail.ru>написал:

>
> > Господа, тут такая оказия приключилась:
> >
> > static void ngx_http_push_send_request(ngx_http_request_t *r,
> > ngx_http_variable_value_t *url_variable) {
> >     if (url_variable != NULL && url_variable->not_found != 1 &&
> > url_variable->len != 0) {
> >         ngx_str_t   *url;
> >         ngx_int_t   len = url_variable->len;
> >         if ((url = ngx_palloc(ngx_http_push_pool, sizeof(*url) + len)) !=
> > NULL) {
> >             url->len = len;
> >             ngx_memcpy(url->data, url_variable->data, len);
> >
> >             ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0, "переход
> на
> > %s", (char *) url->data);
> >         } else {
> >             ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "push
> module:
> > unable to allocate memory for $subscribe_url or $unsubscribe_url
> string");
> >         }
> >         ngx_pfree(ngx_http_push_pool, url);
> >     }
> > }
> >
> > Падает это всё дело на ngx_memcpy(url->data, url_variable->data, len); с
> > worker process exited on signal 11 и я понять не могу, почему. Может,
> > кто-нибудь подскажет?
>
> [quote]
> On POSIX-compliant platforms, SIGSEGV is the signal sent to a process when
> it makes an invalid memory reference, or segmentation fault. The symbolic
> constant for SIGSEGV is defined in the header file signal.h. Symbolic signal
> names are used because signal numbers can vary across platforms; in practice
> it is usually signal #11.[1]
> [/quote]
>
> 1) включаешь опцию --debug
> 2) запускаешь в конфигурации
> worker_process 1;
> master_process off;
> daemon_off;
> 3) запускаешь  dbg nginx
> и ловишь segmentation fault далее backtrace определяешь, где валится
>
> сделай лог:  ngx_log_error( NGX_LOG_DEBUG, r->connection->log, "url->data
> =%d url_variable->data=%d , len\n" ,url->data, url_variable->data, len);
> должно помочь
> если валится на этом логе, значить либо url=NULL либо url_variable = NULL,
> по этому я делаю так:
> if ( url )
>  ngx_log_error( ... выводим данные)
> else
>  ngx_log_error( ... выводим сообщение url=NULL)
>
>
>
>
>
>
>
>
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru на nginx.org
> http://nginx.org/mailman/listinfo/nginx-ru
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено&hellip;
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20100127/e001acb9/attachment-0001.html>


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