mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-05-04 12:41:00 +02:00
[MEDIUM] connect to servers even when the input has already been closed
The BF_AUTO_CLOSE flag prevented a connection from establishing on a server if the other side's input channel was already closed. This is wrong because there may be pending data to be sent. This was causing an issue with stats, as noticed and reported by Cyril Bont. Since the stats are now handled as a server, sometimes concurrent accesses were causing one of the connections to send the shutdown(write) before the connection to the stats function was established, which aborted it early. This fix causes the BF_AUTO_CLOSE flag to be checked only when the connection on the outgoing stream interface has reached an established state. That way we're still able to connect, send the request then close.
This commit is contained in:
parent
1d21e0a28e
commit
296897f2c6
@ -1331,10 +1331,12 @@ resync_stream_interface:
|
||||
|
||||
/* first, let's check if the request buffer needs to shutdown(write), which may
|
||||
* happen either because the input is closed or because we want to force a close
|
||||
* once the server has begun to respond.
|
||||
* once the server has begun to respond. Note that we only apply it once we're
|
||||
* connected, so that we still support queuing of a request with input already
|
||||
* closed.
|
||||
*/
|
||||
if (unlikely((s->req->flags & (BF_SHUTW|BF_SHUTW_NOW|BF_HIJACK|BF_AUTO_CLOSE|BF_SHUTR)) ==
|
||||
(BF_AUTO_CLOSE|BF_SHUTR)))
|
||||
(BF_AUTO_CLOSE|BF_SHUTR) && s->req->cons->state >= SI_ST_EST))
|
||||
buffer_shutw_now(s->req);
|
||||
|
||||
/* shutdown(write) pending */
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user