Спасибо, разобрался. Теперь оно работает немного. Проблема в сабреквестах. Прежде, чем использовать сторонние решения, хотелось бы разобраться в возможностях самого энджи.<br><br>Есть ngx_http_internal_redirect. Она не очень подходит, поскольку идёт возврат ответа пользователю.<br>

У емиллера нашёл ngx_http_subrequest. Оно тоже, по идее, возвращает результат пользователю, но один из параметров этой функции - коллбэк. Мне хотелось бы обрабатывать ответ приложения прямо на сервере, замораживая отсылку ответа. Думаю, коллбэк поможет это сделать. Но пока не представляю как. Этого даже Емиллер, по его признанию, не знает. Хотелось бы услышать мнение знающих или Самого.<br>

<br>Вообще - обработка запроса идёт в один поток. Самый простой вариант, который я вижу - в форке system(&quot;curl ...&quot;) - но это вообще хардкор :)<br><br>Напомню, что сейчас мой патч для пуш-модуля перехватывает момент подключения или отключения пользователя и должен отсылать запрос приложению. После того, как это заработает, буду хранить отдельный список подключённых пользователей и буду слать запросы приложению из нгинкса только когда это нужно, учитывая тайм-ауты дисконнекта.<br>

<br>Заранее спасибо.<br><br><div class="gmail_quote">27 января 2010 г. 14:58 пользователь Maxim Dounin <span dir="ltr">&lt;<a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</a>&gt;</span> написал:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

Hello!<br>
<div class="im"><br>
On Wed, Jan 27, 2010 at 01:36:01PM +0300, pyromaniac - wrote:<br>
<br>
&gt; В общем, url-&gt;data = 0 Из-за этого и падает. Не понятно, почему ngx_palloc<br>
&gt; не срабатывает. Использование r-&gt;pool вместо ngx_http_push_pool даёт<br>
&gt; возможность 1 раз вывести информацию, на второй раз падает с теми же<br>
&gt; симптомами.<br>
<br>
</div>Потому что вы выделяете память под стуктуру ngx_str_t, а не под собственно<br>
данные.  А в структуре ngx_str_t data - это указатель на данные,<br>
который вы используете неинициализировав.<br>
<br>
Вообще говоря - вам повезло что он 0.  Мог бы показывать<br>
куда-нибудь на реальную память процесса, и вы бы её своим кодом<br>
переписали.  Последствия дальше могут быть любые.<br>
<font color="#888888"><br>
Maxim Dounin<br>
</font><div><div></div><div class="h5"><br>
&gt; Александре, а где можно почитать про ngx_shmtx_lock? Что это за зверь такой?<br>
&gt; Он лочит тред, насколько я понимаю?<br>
&gt;<br>
&gt; 27 января 2010 г. 12:34 пользователь Alexandre Kalendarev<br>
&gt; &lt;<a href="mailto:akalend@mail.ru">akalend@mail.ru</a>&gt;написал:<br>
&gt;<br>
&gt; &gt;<br>
&gt; &gt; &gt; Господа, тут такая оказия приключилась:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; static void ngx_http_push_send_request(ngx_http_request_t *r,<br>
&gt; &gt; &gt; ngx_http_variable_value_t *url_variable) {<br>
&gt; &gt; &gt;     if (url_variable != NULL &amp;&amp; url_variable-&gt;not_found != 1 &amp;&amp;<br>
&gt; &gt; &gt; url_variable-&gt;len != 0) {<br>
&gt; &gt; &gt;         ngx_str_t   *url;<br>
&gt; &gt; &gt;         ngx_int_t   len = url_variable-&gt;len;<br>
&gt; &gt; &gt;         if ((url = ngx_palloc(ngx_http_push_pool, sizeof(*url) + len)) !=<br>
&gt; &gt; &gt; NULL) {<br>
&gt; &gt; &gt;             url-&gt;len = len;<br>
&gt; &gt; &gt;             ngx_memcpy(url-&gt;data, url_variable-&gt;data, len);<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;             ngx_log_error(NGX_LOG_ALERT, r-&gt;connection-&gt;log, 0, &quot;переход<br>
&gt; &gt; на<br>
&gt; &gt; &gt; %s&quot;, (char *) url-&gt;data);<br>
&gt; &gt; &gt;         } else {<br>
&gt; &gt; &gt;             ngx_log_error(NGX_LOG_ERR, r-&gt;connection-&gt;log, 0, &quot;push<br>
&gt; &gt; module:<br>
&gt; &gt; &gt; unable to allocate memory for $subscribe_url or $unsubscribe_url<br>
&gt; &gt; string&quot;);<br>
&gt; &gt; &gt;         }<br>
&gt; &gt; &gt;         ngx_pfree(ngx_http_push_pool, url);<br>
&gt; &gt; &gt;     }<br>
&gt; &gt; &gt; }<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Падает это всё дело на ngx_memcpy(url-&gt;data, url_variable-&gt;data, len); с<br>
&gt; &gt; &gt; worker process exited on signal 11 и я понять не могу, почему. Может,<br>
&gt; &gt; &gt; кто-нибудь подскажет?<br>
&gt; &gt;<br>
&gt; &gt; [quote]<br>
&gt; &gt; On POSIX-compliant platforms, SIGSEGV is the signal sent to a process when<br>
&gt; &gt; it makes an invalid memory reference, or segmentation fault. The symbolic<br>
&gt; &gt; constant for SIGSEGV is defined in the header file signal.h. Symbolic signal<br>
&gt; &gt; names are used because signal numbers can vary across platforms; in practice<br>
&gt; &gt; it is usually signal #11.[1]<br>
&gt; &gt; [/quote]<br>
&gt; &gt;<br>
&gt; &gt; 1) включаешь опцию --debug<br>
&gt; &gt; 2) запускаешь в конфигурации<br>
&gt; &gt; worker_process 1;<br>
&gt; &gt; master_process off;<br>
&gt; &gt; daemon_off;<br>
&gt; &gt; 3) запускаешь  dbg nginx<br>
&gt; &gt; и ловишь segmentation fault далее backtrace определяешь, где валится<br>
&gt; &gt;<br>
&gt; &gt; сделай лог:  ngx_log_error( NGX_LOG_DEBUG, r-&gt;connection-&gt;log, &quot;url-&gt;data<br>
&gt; &gt; =%d url_variable-&gt;data=%d , len\n&quot; ,url-&gt;data, url_variable-&gt;data, len);<br>
&gt; &gt; должно помочь<br>
&gt; &gt; если валится на этом логе, значить либо url=NULL либо url_variable = NULL,<br>
&gt; &gt; по этому я делаю так:<br>
&gt; &gt; if ( url )<br>
&gt; &gt;  ngx_log_error( ... выводим данные)<br>
&gt; &gt; else<br>
&gt; &gt;  ngx_log_error( ... выводим сообщение url=NULL)<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; nginx-ru mailing list<br>
&gt; &gt; <a href="mailto:nginx-ru@nginx.org">nginx-ru@nginx.org</a><br>
&gt; &gt; <a href="http://nginx.org/mailman/listinfo/nginx-ru" target="_blank">http://nginx.org/mailman/listinfo/nginx-ru</a><br>
&gt; &gt;<br>
<br>
&gt; _______________________________________________<br>
&gt; nginx-ru mailing list<br>
&gt; <a href="mailto:nginx-ru@nginx.org">nginx-ru@nginx.org</a><br>
&gt; <a href="http://nginx.org/mailman/listinfo/nginx-ru" target="_blank">http://nginx.org/mailman/listinfo/nginx-ru</a><br>
<br>
<br>
_______________________________________________<br>
nginx-ru mailing list<br>
<a href="mailto:nginx-ru@nginx.org">nginx-ru@nginx.org</a><br>
<a href="http://nginx.org/mailman/listinfo/nginx-ru" target="_blank">http://nginx.org/mailman/listinfo/nginx-ru</a><br>
</div></div></blockquote></div><br>