mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-01-05 03:29:35 +00:00
MINOR: mux: Make sure every string is woken up after the handshake.
In case any stream was waiting for the handshake after receiving early data, we have to wake all of them. Do so by making the mux responsible for removing the CO_FL_EARLY_DATA flag after all of them are woken up, instead of doing it in si_cs_wake_cb(), which would then only work for the first one. This makes wait_for_handshake work with HTTP/2.
This commit is contained in:
parent
90084a133d
commit
7fc96d5a01
@ -2086,6 +2086,15 @@ static int h2_wake(struct connection *conn)
|
||||
{
|
||||
struct h2c *h2c = conn->mux_ctx;
|
||||
|
||||
/*
|
||||
* If we received early data, try to wake any stream, just in case
|
||||
* at least one of them was waiting for the handshake
|
||||
*/
|
||||
if ((conn->flags & (CO_FL_EARLY_SSL_HS | CO_FL_EARLY_DATA | CO_FL_HANDSHAKE)) ==
|
||||
CO_FL_EARLY_DATA) {
|
||||
h2_wake_some_streams(h2c, 0, 0);
|
||||
conn->flags &= ~CO_FL_EARLY_DATA;
|
||||
}
|
||||
if (conn->flags & CO_FL_ERROR || conn_xprt_read0_pending(conn) ||
|
||||
h2c->st0 == H2_CS_ERROR2 || h2c->flags & H2_CF_GOAWAY_FAILED ||
|
||||
(eb_is_empty(&h2c->streams_by_id) && h2c->last_sid >= 0 &&
|
||||
|
@ -51,6 +51,12 @@ static int mux_pt_wake(struct connection *conn)
|
||||
|
||||
ret = cs->data_cb->wake ? cs->data_cb->wake(cs) : 0;
|
||||
|
||||
/* If we had early data, and we're done with the handshake
|
||||
* then whe know the data are safe, and we can remove the flag.
|
||||
*/
|
||||
if ((conn->flags & (CO_FL_EARLY_DATA | CO_FL_EARLY_SSL_HS | CO_FL_HANDSHAKE)) ==
|
||||
CO_FL_EARLY_DATA)
|
||||
conn->flags &= ~CO_FL_EARLY_DATA;
|
||||
if (ret >= 0)
|
||||
cs_update_mux_polling(cs);
|
||||
return ret;
|
||||
|
@ -585,7 +585,6 @@ static int si_cs_wake_cb(struct conn_stream *cs)
|
||||
* the handshake.
|
||||
*/
|
||||
if ((conn->flags & (CO_FL_EARLY_DATA | CO_FL_EARLY_SSL_HS)) == CO_FL_EARLY_DATA) {
|
||||
conn->flags &= ~CO_FL_EARLY_DATA;
|
||||
task_wakeup(si_task(si), TASK_WOKEN_MSG);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user