MEDIUM: stream-int: support splicing from applets

If we want to splice from applets, we must check the pipe before clearing
SI_FL_WAIT_ROOM.
This commit is contained in:
Willy Tarreau 2014-12-09 19:47:54 +01:00
parent b034b2598d
commit 9b20c55562

View File

@ -183,7 +183,7 @@ static void stream_int_update_embedded(struct stream_interface *si)
(si->ib->cons->flags & SI_FL_WAIT_DATA)) { (si->ib->cons->flags & SI_FL_WAIT_DATA)) {
si_chk_snd(si->ib->cons); si_chk_snd(si->ib->cons);
/* check if the consumer has freed some space */ /* check if the consumer has freed some space */
if (!channel_full(si->ib)) if (!channel_full(si->ib) && !si->ib->pipe)
si->flags &= ~SI_FL_WAIT_ROOM; si->flags &= ~SI_FL_WAIT_ROOM;
} }
@ -314,7 +314,7 @@ static void stream_int_chk_rcv(struct stream_interface *si)
if (unlikely(si->state != SI_ST_EST || (ib->flags & (CF_SHUTR|CF_DONT_READ)))) if (unlikely(si->state != SI_ST_EST || (ib->flags & (CF_SHUTR|CF_DONT_READ))))
return; return;
if (channel_full(ib)) { if (channel_full(ib) || ib->pipe) {
/* stop reading */ /* stop reading */
si->flags |= SI_FL_WAIT_ROOM; si->flags |= SI_FL_WAIT_ROOM;
} }