mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-10 00:57:02 +02:00
[MEDIUM] stream_sock: factor out the return path in case of no-writes
Previously, we wrote nothing only if the buffer was empty. Now with send_max, we can also write nothing because we are not allowed to send anything due to send_max. The code starts to look like spaghetti. It needs to be rearranged a lot before merging the splice patches.
This commit is contained in:
parent
dcef33fa9b
commit
4d9b1dee9f
@ -358,13 +358,12 @@ int stream_sock_write(int fd) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Funny, we were called to write something but there wasn't
|
/* Funny, we were called to write something but there wasn't
|
||||||
* anything. Theorically we cannot get there, but just in case,
|
* anything. We can get there, for example if we were woken up
|
||||||
* let's disable the write event and pretend we never came there.
|
* on a write event to finish the splice, but the send_max is 0
|
||||||
|
* so we cannot write anything from the buffer. Let's disable
|
||||||
|
* the write event and pretend we never came there.
|
||||||
*/
|
*/
|
||||||
si->flags |= SI_FL_WAIT_DATA;
|
goto write_nothing;
|
||||||
EV_FD_CLR(fd, DIR_WR);
|
|
||||||
b->wex = TICK_ETERNITY;
|
|
||||||
goto out_wakeup;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef MSG_NOSIGNAL
|
#ifndef MSG_NOSIGNAL
|
||||||
@ -409,6 +408,7 @@ int stream_sock_write(int fd) {
|
|||||||
if (!b->l && !b->splice_len) {
|
if (!b->l && !b->splice_len) {
|
||||||
b->flags |= BF_EMPTY;
|
b->flags |= BF_EMPTY;
|
||||||
|
|
||||||
|
write_nothing:
|
||||||
/* Maybe we just wrote the last chunk and need to close ? */
|
/* Maybe we just wrote the last chunk and need to close ? */
|
||||||
if ((b->flags & (BF_SHUTW|BF_EMPTY|BF_HIJACK|BF_WRITE_ENA|BF_SHUTR)) == (BF_EMPTY|BF_WRITE_ENA|BF_SHUTR)) {
|
if ((b->flags & (BF_SHUTW|BF_EMPTY|BF_HIJACK|BF_WRITE_ENA|BF_SHUTR)) == (BF_EMPTY|BF_WRITE_ENA|BF_SHUTR)) {
|
||||||
if (si->state == SI_ST_EST) {
|
if (si->state == SI_ST_EST) {
|
||||||
@ -418,7 +418,11 @@ int stream_sock_write(int fd) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
si->flags |= SI_FL_WAIT_DATA;
|
/* we may either get there when the buffer is empty or when
|
||||||
|
* we refrain from sending due to send_max reached.
|
||||||
|
*/
|
||||||
|
if (!b->l && !b->splice_len)
|
||||||
|
si->flags |= SI_FL_WAIT_DATA;
|
||||||
EV_FD_CLR(fd, DIR_WR);
|
EV_FD_CLR(fd, DIR_WR);
|
||||||
b->wex = TICK_ETERNITY;
|
b->wex = TICK_ETERNITY;
|
||||||
goto out_wakeup;
|
goto out_wakeup;
|
||||||
|
Loading…
Reference in New Issue
Block a user