mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-07 23:56:57 +02:00
BUG/MINOR: stream-int: avoid calling rcv_buf() when splicing is still possible
In si_cs_recv(), we can end up with a partial splice() call that will be followed by an attempt to us rcv_buf(). Sometimes this works and places data into the buffer, which then prevent splicing from being used, and this causes splice() and recvfrom() calls to alternate. Better simply refrain from calling rcv_buf() when there are data in the pipe and still data to be forwarded. Usually this indicates that we've ate everything available and that we still want to use splice() on subsequent calls. This should be backported to 2.1 and 2.0.
This commit is contained in:
parent
1ac5f20804
commit
c640ef1a7d
@ -1327,6 +1327,13 @@ int si_cs_recv(struct conn_stream *cs)
|
||||
ic->pipe = NULL;
|
||||
}
|
||||
|
||||
if (ic->pipe && ic->to_forward && !(flags & CO_RFL_BUF_FLUSH)) {
|
||||
/* don't break splicing by reading, but still call rcv_buf()
|
||||
* to pass the flag.
|
||||
*/
|
||||
goto done_recv;
|
||||
}
|
||||
|
||||
/* now we'll need a input buffer for the stream */
|
||||
if (!si_alloc_ibuf(si, &(si_strm(si)->buffer_wait)))
|
||||
goto end_recv;
|
||||
|
Loading…
Reference in New Issue
Block a user