如何展平nginx缓冲链?
我正在尝试使用nginx缓冲链,并在一些实验代码中使用它。为了做到这一点,我需要首先将链展平为单个内存块。到目前为止,我得到的是实际生产代码有点不同,因此这是未经测试的:如何展平nginx缓冲链?,nginx,Nginx,我正在尝试使用nginx缓冲链,并在一些实验代码中使用它。为了做到这一点,我需要首先将链展平为单个内存块。到目前为止,我得到的是实际生产代码有点不同,因此这是未经测试的: u_char *flatten_chain(ngx_chain_t *out) { off_t bsize; ngx_chain_t *out_ptr; u_char *ret, *ret_ptr; uint64_t flattenSize = 0; o
u_char *flatten_chain(ngx_chain_t *out) {
off_t bsize;
ngx_chain_t *out_ptr;
u_char *ret, *ret_ptr;
uint64_t flattenSize = 0;
out_ptr = out;
while (out_ptr) {
if(!out_ptr->buf->in_file) {
bsize = ngx_buf_size(out_ptr->buf);
flattenSize += bsize;
}
out_ptr = out_ptr->next;
}
ret = malloc(flattenSize);
ret_ptr = ret;
out_ptr = out;
while (out_ptr) {
bsize = ngx_buf_size(out_ptr->buf);
if(!out_ptr->buf->in_file) {
memcpy(ret_ptr, out_ptr->buf->pos, (size_t)bsize);
ret_ptr += bsize;
}
out_ptr = out_ptr->next;
}
return(ret);
}
然而,它似乎不起作用。免责声明:有可能它确实起作用,而我的数据在其他地方被损坏。。。但是,当我调查这一点时,是否有人能证实或否认上述方法是有效的
谢谢 它怎么不起作用?如果你在函数返回之前检查ret指向的内容,比如说打印出来,它们不是你期望的吗?我知道你认为这不是生产代码,但如果可能的话,你应该使用ngx_pcalloc而不是malloc,并给它请求的池成员。这样,在处理请求时,Nginx会自动释放内存。