У меня была схожая проблема пока для входной цепочки для каждого буфера не выставлял<br>cl-&gt;buf-&gt;pos = cl-&gt;buf-&gt;last = NULL;<br><br><div class="gmail_quote">2008/4/21 anon &lt;<a href="mailto:linux-kernel@mail.ru">linux-kernel@mail.ru</a>&gt;:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">вот мой body_filter_module<br>
...<br>
b = ngx_pcalloc(r-&gt;pool, sizeof(ngx_buf_t));<br>
 &nbsp; &nbsp; &nbsp; &nbsp;for(cl = in ; cl ; )<br>
 &nbsp; &nbsp; &nbsp; &nbsp;{<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;size = cl-&gt;buf-&gt;last - cl-&gt;buf-&gt;pos;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;el = ngx_array_push_n(r-&gt;news, size);<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;memcpy(el, cl-&gt;buf-&gt;pos, size);//я копирую себе содержимое тело ответа<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//cl-&gt;buf-&gt;pos = cl-&gt;buf-&gt;last;если не делать эти строчки ответ от бекенда перестает ситаться<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//cl-&gt;buf-&gt;last = cl-&gt;buf-&gt;start;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (cl-&gt;buf-&gt;last_buf)<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*((char *)ngx_array_push(r-&gt;news)) = &#39;\0&#39;;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//printf(&quot;news=%s\nend\n&quot;, (char *)r-&gt;news-&gt;elts);<br>
//а тут я хочу создвть свою цепочку полжить в нее буфер и обработанные данные и выдать клиенту<br>
//как правильно вызвать следующий фильтр с моей цепочкой<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//return ngx_http_next_body_filter(r, in);<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cl = cl-&gt;next;<br>
 &nbsp; &nbsp; &nbsp; &nbsp;}<br>
как правильно обновить цепочки чтобы от апстрима, чтобы продолжали приходит данные и я их накапливал у себя в памяти чтобы потом отправить после некоторой модификации<br>
конкретно затык происходит в ngx_http_upstream.c:3553 в ngx_chain_update_chains что то с цепочками не так обрабатывается,<br>
если я из своего фильтр модуля не вызываю ngx_http_next_body_filter(r, in), то при обновлениии цепочек получаю free - NULL busy - not NULL out - NULL<br>
а должно быть(когда сразу из модуля вызываю http_next_body_filter(r, in)<br>
free - not NULL busy - not NULL out - NULL<br>
какой код нада возвращать из моего фильтра, если я не отправляю цепочки следующему фильтру а просто у себя данные собираю.<br>
<br>
Подскажите, куда копатью<br>
Спасибо.<br>
<div><div></div><div class="Wj3C7c"><br>
-----Original Message-----<br>
From: Sergey Bochenkov &lt;<a href="mailto:bachan@j3qq4.org">bachan@j3qq4.org</a>&gt;<br>
To: <a href="mailto:nginx-ru@sysoev.ru">nginx-ru@sysoev.ru</a><br>
Date: Mon, 21 Apr 2008 14:00:29 +0400<br>
Subject: Re: upstream<br>
<br>
&gt;<br>
&gt; А в чем проблема? Как пробовали?<br>
&gt; В рассылке по main_filter_need_in_memory и NGX_AGAIN искали?<br>
&gt;<br>
&gt; Архив рассылки есть на <a href="http://gmane.org" target="_blank">gmane.org</a>.<br>
&gt;<br>
&gt; &gt; как организовать такую штуку: получать ответ от апстрима - сохранить его весь в памяти обработать и потом послать пользователю.<br>
&gt; &gt; Пробую серез фильтр модуль - не могу разобраться как цепочки обрабатывать а потом отослать все<br>
&gt; &gt; Подскажите<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
<br>
</div></div></blockquote></div><br>