mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-02-02 19:42:41 +00:00
BUG: stream_interface: Reuse connection even if the output channel is empty
in function 'si_connect', an existing connection is reused (and considered as established) only when there are some pending data in the output channel. This can be problem when filters are used, because a filter can choose to not forward data immediatly. So when we try to initiate a connection to a server, the output channel can be empty. In this situation, if the connection already exists, it is not considered as established and nothing happens. If the stream interface is in the state SI_ST_ASS, this leads to an infinite loop in process_stream because it remains in this state. This patch fixes this problem. Now, in 'si_connect', we always reuse an existing connection, whether or not there are pending data in the output channel.
This commit is contained in:
parent
fdfcc9d2b7
commit
c34d19fc3c
@ -362,11 +362,12 @@ static inline int si_connect(struct stream_interface *si)
|
||||
/* we're in the process of establishing a connection */
|
||||
si->state = SI_ST_CON;
|
||||
}
|
||||
else if (!channel_is_empty(si_oc(si))) {
|
||||
/* reuse the existing connection, we'll have to send a
|
||||
* request there.
|
||||
*/
|
||||
else {
|
||||
/* reuse the existing connection */
|
||||
if (!channel_is_empty(si_oc(si))) {
|
||||
/* we'll have to send a request there. */
|
||||
conn_data_want_send(conn);
|
||||
}
|
||||
|
||||
/* the connection is established */
|
||||
si->state = SI_ST_EST;
|
||||
|
Loading…
Reference in New Issue
Block a user