<div>Hi all.</div><div><br></div><div>I try to implement a bit more complicated filter module for Nginx.</div><div>Because of this I study source codes of existing http modules. I have to allocate my own buffers for filtered data, I cannot change supplied buffers in place.</div>
<div><br></div><div>I have been surprised, that it is necessary to handle buffers of zero size in special way.</div><div><br></div><div>For example, in ngx_http_charset_filter_module.c is the following code:</div><div><br>
</div><div><br></div><div>   if (ngx_buf_size(b) == 0) {</div><div><br></div><div>                *ll = ngx_alloc_chain_link(r->pool);</div><div>                if (*ll == NULL) {</div><div>                    return NGX_ERROR;</div>
<div>                }</div><div><br></div><div>                (*ll)->buf = b;</div><div>                (*ll)->next = NULL;</div><div><br></div><div>                ll = &(*ll)->next;</div><div><br></div><div>
                continue;</div><div>            }</div><div><br></div><div>My questions are:</div><div><br></div><div>* Can such buffers of zero size really appear?</div><div>* Is the number of buffers of zero size small? As I understand, memory of the chain-link is not recycled until the http request is not fully processed.</div>
<div><br></div><div>Thanks.</div><div><br></div><div>Daniel</div>