mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-05-04 20:46:11 +02:00
[MEDIUM] stream_int: adjust WAIT_ROOM handling
When applets write data, they generall cannot fill the buffer, so as soon as we find a non-empty buffer, we're sure we're missing some room.
This commit is contained in:
parent
b0c9bc4f95
commit
96fd4b5f09
@ -438,10 +438,8 @@ void stats_io_handler(struct stream_interface *si)
|
||||
}
|
||||
|
||||
/* If the output functions are still there, it means they require more room. */
|
||||
if (si->st0 >= STAT_CLI_OUTPUT) {
|
||||
si->flags |= SI_FL_WAIT_ROOM;
|
||||
if (si->st0 >= STAT_CLI_OUTPUT)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Now we close the output if one of the writers did so,
|
||||
* or if we're not in interactive mode and the request
|
||||
@ -637,9 +635,6 @@ void http_stats_io_handler(struct stream_interface *si)
|
||||
if (stats_dump_http(s, res, s->be->uri_auth)) {
|
||||
si->st0 = 1;
|
||||
si->shutw(si);
|
||||
} else {
|
||||
/* buffer full */
|
||||
si->flags |= SI_FL_WAIT_ROOM;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -120,7 +120,10 @@ void stream_int_update_embedded(struct stream_interface *si)
|
||||
if ((si->ob->flags & (BF_FULL|BF_SHUTW|BF_SHUTW_NOW|BF_HIJACK)) == 0)
|
||||
si->flags |= SI_FL_WAIT_DATA;
|
||||
|
||||
if ((si->ib->flags & (BF_FULL|BF_SHUTR)) == BF_FULL)
|
||||
/* we're almost sure that we need some space if the buffer is not
|
||||
* empty, even if it's not full, because the applets can't fill it.
|
||||
*/
|
||||
if ((si->ib->flags & (BF_SHUTR|BF_OUT_EMPTY)) == 0)
|
||||
si->flags |= SI_FL_WAIT_ROOM;
|
||||
|
||||
if (si->ob->flags & BF_WRITE_ACTIVITY) {
|
||||
@ -134,10 +137,12 @@ void stream_int_update_embedded(struct stream_interface *si)
|
||||
si->ib->rex = tick_add_ifset(now_ms, si->ib->rto);
|
||||
}
|
||||
|
||||
if (si->ob->flags & BF_WRITE_PARTIAL)
|
||||
if (likely((si->ob->flags & (BF_SHUTW|BF_WRITE_PARTIAL|BF_FULL)) == BF_WRITE_PARTIAL &&
|
||||
(si->ob->prod->flags & SI_FL_WAIT_ROOM)))
|
||||
si->ob->prod->chk_rcv(si->ob->prod);
|
||||
|
||||
if (si->ib->flags & BF_READ_PARTIAL)
|
||||
if (((si->ib->flags & (BF_READ_PARTIAL|BF_OUT_EMPTY)) == BF_READ_PARTIAL) &&
|
||||
(si->ib->cons->flags & SI_FL_WAIT_DATA))
|
||||
si->ib->cons->chk_snd(si->ib->cons);
|
||||
|
||||
/* Note that we're trying to wake up in two conditions here :
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user