Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
zero size ошибка при добавлении текста в body filter
- To: nginx-ru@xxxxxxxxx
- Subject: zero size ошибка при добавлении текста в body filter
- From: "mishalunin" <nginx-forum@xxxxxxxx>
- Date: Mon, 06 Feb 2012 19:38:03 -0500
- Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mickey.jlkhosting.com; s=x; h=Date:Sender:From:Message-ID:Content-Transfer-Encoding:Content-Type:Subject:To; bh=SVRgKAZPWfaGYu2RNTHYusN6PYPmKiGtsKqINtFzm+s=; b=ejt8zfo28C8t4vdfKSYl6+m4LJ9WEF+Sa2QDIHF5mRQ7ZZ49/YJOnlM4GLSevVeSHoc2qO03vBLp5LsO5Ko66MpBfTE2FClgK7Eic6yTkdDlwl+OKXfTQ/JjVVGUYYKr;
Здравствуйте. Пробую писать свой
модуль для nginx и столкнулся со
следующей проблемой:
в body фильтре своего модуля добавляю
новый буфер в конец цепочки:
/*тут ищется последний chain link*/
ngx_buf_t *b;
b = ngx_calloc_buf(r->pool);
b->pos = (u_char *)IF_CODE;
b->last = b->pos + sizeof(IF_CODE) - 1;
b->memory = 1;
ngx_chain_t *new_link;
new_link = ngx_alloc_chain_link(r->pool);
new_link->buf = b;
new_link->next = NULL;
chain_link->next = new_link;
chain_link->buf->last_buf = 0;
chain_link->buf->sync = 1;
new_link->buf->last_buf = 1;
return ngx_http_next_body_filter(r, in);
в итоге браузеру не отдается ничего, а в
логах следующее:
2012/02/06 15:52:51 [debug] 8424#0: *3 write old buf t:1 f:0
08D15D44, pos 08D15D44, size: 217 file: 0, size: 0, last: 0 (headers)
2012/02/06 15:52:51 [debug] 8424#0: *3 write new buf t:0 f:1
00000000, pos 00000000, size: 0 file: 0, size: 6506, last: 0 (html
file)
2012/02/06 15:52:51 [debug] 8424#0: *3 write new buf t:0 f:1 (???)
00000000, pos 080BE1B6, size: 22 file: 0, size: 0, last: 0 (my text)
2012/02/06 15:52:51 [alert] 8424#0: *3 zero size buf in writer t:0
r:0 f:1 00000000 080BE1B6-080BE1CC 00000092 0-0 while sending response
to client, client: 127.0.0.1, server: localhost, request: "GET
/license.html HTTP/1.1", host: "127.0.0.1
полазив отладчиком, обнаружил, что
данные в цепочке мистическим образом
меняются сразу после передачи ее
следующему фильтру:
(gdb)
164 return ngx_http_next_body_filter(r, in);
(gdb) p *(in->next->buf)
$15 = {pos = 0x80be1b6 "<h1>INSERTED CODE</h1>", last = 0x80be1cc "",
file_pos = 0, file_last = 0, start = 0x0, end = 0x0, tag = 0x0,
file = 0x0, shadow = 0x0, temporary = 0, memory = 1, mmap = 0,
recycled = 0, in_file = 0, flush = 0, sync = 0, last_buf = 1,
last_in_chain = 0, last_shadow = 0, temp_file = 0, num = 0}
(gdb) step
ngx_http_charset_body_filter (r=0x9ae5048, in=0xbf861fe4)
at src/http/modules/ngx_http_charset_filter_module.c:544
544 {
(gdb) p *(in->next->buf)
$16 = {pos = 0x80be1b6 "<h1>INSERTED CODE</h1>", last = 0x80be1cc "",
file_pos = 0, file_last = 0, start = 0x0, end = 0x0, tag = 0x0,
file = 0x82, shadow = 0x0, temporary = 0, memory = 0, mmap = 0,
recycled = 0, in_file = 1, flush = 1, sync = 1, last_buf = 0,
last_in_chain = 0, last_shadow = 1, temp_file = 1, num = 0}
например, меняется флаг memory из-за
которого и вызывается эта ошибка. Что я
делаю не так? Спасибо :)
Posted at Nginx Forum:
http://forum.nginx.org/read.php?21,222059,222059#msg-222059
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru
|