|
commit a80c11777b09ea494b5da76a5bcb096851fb6097
|
|
Author: Christopher Faulet <cfaulet@haproxy.com>
|
|
Date: Mon Sep 23 16:11:57 2019 +0200
|
|
|
|
BUG/MEDIUM: stream-int: Process connection/CS errors during synchronous sends
|
|
|
|
If an error occurred on the connection or the conn-stream, no syncrhonous send
|
|
is performed. If the error was not already processed and there is no more I/O,
|
|
it will never be processed and the stream will never be notified of this
|
|
error. This may block the stream until a timeout is reached or infinitly if
|
|
there is no timeout.
|
|
|
|
Concretly, this bug can be triggered time to time with h2spec, running the test
|
|
"http2/5.1.1/2".
|
|
|
|
This patch depends on the commit 328ed220a "BUG/MINOR: stream-int: Process
|
|
connection/CS errors first in si_cs_send()". Both must be backported to 2.0 and
|
|
probably to 1.9. In 1.9, the code is totally different, so this patch would have
|
|
to be adapted.
|
|
|
|
(cherry picked from commit e55a5a41713b629d349ba020183744a38129b892)
|
|
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
|
|
|
|
diff --git a/src/stream_interface.c b/src/stream_interface.c
|
|
index 4130444e..ef0fea7f 100644
|
|
--- a/src/stream_interface.c
|
|
+++ b/src/stream_interface.c
|
|
@@ -922,12 +922,6 @@ void si_sync_send(struct stream_interface *si)
|
|
if (!cs)
|
|
return;
|
|
|
|
- if (cs->flags & (CS_FL_ERROR|CS_FL_ERR_PENDING))
|
|
- return;
|
|
-
|
|
- if (cs->conn->flags & CO_FL_ERROR)
|
|
- return;
|
|
-
|
|
si_cs_send(cs);
|
|
}
|
|
|