* buffer to perform zero-copy. This is only achievable if MUX buffer
* is currently empty.
*/
- if (unlikely(fsize == count &&
+ if (unlikely(fsize == count && b_size(res) == b_size(buf) &&
!b_data(res) &&
htx_nbblks(htx) == 1 && type == HTX_BLK_DATA)) {
void *old_area = res->area;
goto end;
type = htx_get_blk_type(blk);
size = htx_get_blksz(blk);
- if (unlikely(size == count && htx_nbblks(htx) == 1 && type == HTX_BLK_DATA)) {
+ if (unlikely(size == count && b_size(mbuf) == b_size(buf) &&
+ htx_nbblks(htx) == 1 && type == HTX_BLK_DATA)) {
void *old_area = mbuf->area;
int eom = (htx->flags & HTX_FL_EOM);
(!(h1m->flags & H1_MF_CHNK) || ((h1m->flags & H1_MF_CHNK) && (!h1m->curr_len || count == h1m->curr_len))) &&
htx_nbblks(htx) == 1 &&
htx_get_blk_type(blk) == HTX_BLK_DATA &&
- htx_get_blk_value(htx, blk).len == count) {
+ htx_get_blk_value(htx, blk).len == count &&
+ b_size(&h1c->obuf) == b_size(buf)) {
void *old_area;
int eom = (htx->flags & HTX_FL_EOM);
if (!b_data(&h1c->obuf) &&
htx_nbblks(htx) == 1 &&
htx_get_blk_type(blk) == HTX_BLK_DATA &&
- htx_get_blksz(blk) == count) {
+ htx_get_blksz(blk) == count &&
+ b_size(&h1c->obuf) == b_size(buf)) {
void *old_area;
old_area = h1c->obuf.area;
* the time. This goes for headers, data blocks and any data extracted
* from the HTX blocks.
*/
- if (unlikely(fsize == count &&
+ if (unlikely(fsize == count && b_size(mbuf) == b_size(buf) &&
htx_nbblks(htx) == 1 && type == HTX_BLK_DATA &&
fsize <= h2s_mws(h2s) && fsize <= h2c->mws && fsize <= h2c->mfs)) {
void *old_area = mbuf->area;