mirror of
http://git.haproxy.org/git/haproxy.git
synced 2026-02-10 12:22:45 +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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user