Welcome! Log In Create A New Profile


Re: nginx_http_write_filter_module.c

Yuval Abadi via nginx
June 27, 2023 06:54AM

From: nginx <nginx-bounces@nginx.org> on behalf of Maxim Dounin <mdounin@mdounin.ru>
Date: Wednesday, 21 June 2023 at 19:01
To: Yuval Abadi via nginx <nginx@nginx.org>
Subject: Re: nginx_http_write_filter_module.c
EXTERNAL MAIL: nginx-bounces@nginx.org


On Wed, Jun 21, 2023 at 11:36:54AM +0000, Yuval Abadi via nginx wrote:

> Nginx 1.23.2
> The cpi ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *in)
> Loop over the request out buffers and in chain
> If calculate size of combined buffer to write.
> I add body replacement on chain.
> It have value, but ngx_buf_size(cl->buf);
> Return it have 0. Size.
> (l->buf->last - cl->buf->pos) give the correct size
> So the buffer not written.
> Only the header part send back to client
> Any idea?
> 2023/06/21 10:45:31 [debug] 22962#22962: *3 write old buf t:1 f:0 00005600970D81E0, pos 00005600970D81E0, size: 179 file: 0, size: 0
> 2023/06/21 10:45:31 [debug] 22962#22962: *3 write new buf t:0 f:0 00005600970D8098, pos 00005600970D8098, size: 247 file: 0, size: 0
> 2023/06/21 10:45:31 [debug] 22962#22962: *3 http write filter: l:1 f:0 s:179
> 2023/06/21 10:45:31 [debug] 22962#22962: *3 http write filter limit 2097152
> 2023/06/21 10:45:31 [debug] 22962#22962: *3 writev: 179 of 179

Note the "t:0" part in the relevant debug log line: it suggests
that the cl->buf->temporary flag is not set.

If the cl->buf->memory flag isn't set as well, this basically
means that buffer does not reference any memory at all (even if
cl->buf->post / cl->buf->last pointers are set). For such a
buffer ngx_buf_size() will return the file size. And, since the
buffer does not reference file data as well (note "f:0"), it is
expected to be 0 (and it is, as per "file: 0, size: 0").

So it looks like the behaviour you observe is the result of
forgotten cl->buf->memory (or cl->buf->temporary) flag. Check
your code to see if the buffer flags are set correctly, it looks
like they aren't.



for basic information about memory buffers and some basic
examples. For additional information, check nginx code.

Maxim Dounin
nginx mailing list
nginx mailing list
Subject Author Posted


Yuval Abadi via nginx June 21, 2023 07:38AM

Re: nginx_http_write_filter_module.c

Maxim Dounin June 21, 2023 12:02PM

Re: nginx_http_write_filter_module.c

Yuval Abadi via nginx June 27, 2023 06:54AM

Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 337
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready