mirror of
https://github.com/haproxy/haproxy.git
synced 2026-06-07 15:52:10 -04:00
BUG/MAJOR: stream_interface: certain workloads could cause get stuck
Some very specifically scheduled workloads could sometimes get stuck when data receive was disabled due to buffer full then re-enabled due to a full send(). A conn_data_want_recv() had to be set again in this specific case. This bug was introduced with connection rework and polling changes in dev12.
This commit is contained in:
parent
bc174aa144
commit
9f7c6a183b
1 changed files with 2 additions and 0 deletions
|
|
@ -578,6 +578,8 @@ static int si_conn_wake_cb(struct connection *conn)
|
||||||
}
|
}
|
||||||
else if ((si->ib->flags & (CF_SHUTR|CF_READ_PARTIAL|CF_DONT_READ|CF_READ_NOEXP)) == CF_READ_PARTIAL &&
|
else if ((si->ib->flags & (CF_SHUTR|CF_READ_PARTIAL|CF_DONT_READ|CF_READ_NOEXP)) == CF_READ_PARTIAL &&
|
||||||
!channel_full(si->ib)) {
|
!channel_full(si->ib)) {
|
||||||
|
/* we must re-enable reading if si_chk_snd() has freed some space */
|
||||||
|
__conn_data_want_recv(conn);
|
||||||
if (tick_isset(si->ib->rex))
|
if (tick_isset(si->ib->rex))
|
||||||
si->ib->rex = tick_add_ifset(now_ms, si->ib->rto);
|
si->ib->rex = tick_add_ifset(now_ms, si->ib->rto);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue