qb->offset += n;
}
+ if (qb->offset >= qb->last_offset) {
+ qb->last_chain = NULL;
+ }
+
qb->chain = *ll;
*ll = NULL;
if (qb->chain == NULL) {
qb->offset = offset;
}
+
+ if (qb->offset >= qb->last_offset) {
+ qb->last_chain = NULL;
+ }
}
ngx_buf_t *b;
ngx_chain_t *cl, **chain;
- base = qb->offset;
- chain = &qb->chain;
+ if (qb->last_chain && offset >= qb->last_offset) {
+ base = qb->last_offset;
+ chain = qb->last_chain;
+
+ } else {
+ base = qb->offset;
+ chain = &qb->chain;
+ }
while (in && limit) {
}
}
+ qb->last_offset = base;
+ qb->last_chain = chain;
+
return in;
}