mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-18 09:24:31 +00:00
MINOR: connection: implement cs_drain_and_close()
We had cs_close() which forces a CS_SHR_RESET mode on the read side, and due to this there are a few call places in the checks which perform a manual call to conn_sock_drain() before calling cs_close(). This is absurd by principle, and it can be counter-productive in the case of a mux where this could even cause the opposite of the desired effect by deleting pending frames on the socket before closing. Let's add cs_drain_and_close() which uses the CS_SHR_DRAIN mode to prepare this.
This commit is contained in:
parent
a5ea751922
commit
6aee5b9a4c
@ -267,6 +267,14 @@ static inline void cs_close(struct conn_stream *cs)
|
|||||||
cs->flags = CS_FL_NONE;
|
cs->flags = CS_FL_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* completely close a conn_stream after draining possibly pending data (but do not detach it) */
|
||||||
|
static inline void cs_drain_and_close(struct conn_stream *cs)
|
||||||
|
{
|
||||||
|
cs_shutw(cs, CS_SHW_SILENT);
|
||||||
|
cs_shutr(cs, CS_SHR_DRAIN);
|
||||||
|
cs->flags = CS_FL_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
/* sets CS_FL_ERROR or CS_FL_ERR_PENDING on the cs */
|
/* sets CS_FL_ERROR or CS_FL_ERR_PENDING on the cs */
|
||||||
static inline void cs_set_error(struct conn_stream *cs)
|
static inline void cs_set_error(struct conn_stream *cs)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user