Release 4.0.4

This commit is contained in:
George Wang 2024-01-08 22:43:47 -05:00
parent 9d9cde9734
commit 46c448d865
5 changed files with 46 additions and 13 deletions

View file

@ -1,3 +1,8 @@
2024-01-08
- 4.0.4
- Fix DCID validation.
- Fix CPU spinning due to pending STREAM_BLOCKED frame.
2023-12-25
- 4.0.3
- Fix session resumption bug introduced in 4.0.2.

View file

@ -26,7 +26,7 @@ author = u'LiteSpeed Technologies'
# The short X.Y version
version = u'4.0'
# The full version, including alpha/beta/rc tags
release = u'4.0.3'
release = u'4.0.4'
# -- General configuration ---------------------------------------------------

View file

@ -27,7 +27,7 @@ extern "C" {
#define LSQUIC_MAJOR_VERSION 4
#define LSQUIC_MINOR_VERSION 0
#define LSQUIC_PATCH_VERSION 3
#define LSQUIC_PATCH_VERSION 4
/**
* Engine flags:

View file

@ -755,6 +755,7 @@ blocked_ka_alarm_expired (enum alarm_id al_id, void *ctx,
struct ietf_full_conn *const conn = (struct ietf_full_conn *) ctx;
struct lsquic_stream *stream;
struct lsquic_hash_elem *el;
int has_send_flag;
if (lsquic_conn_cap_avail(&conn->ifc_pub.conn_cap) == 0)
{
@ -769,12 +770,18 @@ blocked_ka_alarm_expired (enum alarm_id al_id, void *ctx,
stream = lsquic_hashelem_getdata(el);
if (lsquic_stream_is_blocked(stream))
{
if (!(stream->sm_qflags & SMQF_SENDING_FLAGS))
TAILQ_INSERT_TAIL(&conn->ifc_pub.sending_streams, stream,
next_send_stream);
has_send_flag = (stream->sm_qflags & SMQF_SENDING_FLAGS);
stream->sm_qflags |= SMQF_SEND_BLOCKED;
LSQ_DEBUG("set SEND_BLOCKED flag on stream %"PRIu64, stream->id);
return;
if (!lsquic_sendctl_gen_stream_blocked_frame(
stream->conn_pub->send_ctl, stream))
{
LSQ_DEBUG("failed to send STREAM_BLOCKED frame for"
" stream %"PRIu64 " immedately, postpone.", stream->id);
if (!has_send_flag)
TAILQ_INSERT_TAIL(&conn->ifc_pub.sending_streams, stream,
next_send_stream);
}
}
}
}
@ -7387,6 +7394,7 @@ process_regular_packet (struct ietf_full_conn *conn,
enum was_missing was_missing;
int is_rechist_empty;
unsigned char saved_path_id;
int is_dcid_changed;
if (HETY_RETRY == packet_in->pi_header_type)
return process_retry_packet(conn, packet_in);
@ -7489,16 +7497,31 @@ process_regular_packet (struct ietf_full_conn *conn,
}
}
is_dcid_changed = !LSQUIC_CIDS_EQ(CN_SCID(&conn->ifc_conn),
&packet_in->pi_dcid);
if (pns == PNS_INIT)
conn->ifc_conn.cn_esf.i->esfi_set_iscid(conn->ifc_conn.cn_enc_session,
packet_in);
else if (pns == PNS_HSK)
else
{
if ((conn->ifc_flags & (IFC_SERVER | IFC_IGNORE_INIT)) == IFC_SERVER)
ignore_init(conn);
lsquic_send_ctl_maybe_calc_rough_rtt(&conn->ifc_send_ctl, pns - 1);
if (is_dcid_changed)
{
if (LSQUIC_CIDS_EQ(&conn->ifc_conn.cn_cces[0].cce_cid,
&packet_in->pi_dcid)
&& !(conn->ifc_conn.cn_cces[0].cce_flags & CCE_SEQNO))
{
ABORT_QUIETLY(0, TEC_PROTOCOL_VIOLATION,
"protocol violation detected bad dcid");
return -1;
}
}
if (pns == PNS_HSK)
{
if ((conn->ifc_flags & (IFC_SERVER | IFC_IGNORE_INIT)) == IFC_SERVER)
ignore_init(conn);
lsquic_send_ctl_maybe_calc_rough_rtt(&conn->ifc_send_ctl, pns - 1);
}
}
EV_LOG_PACKET_IN(LSQUIC_LOG_CONN_ID, packet_in);
is_rechist_empty = lsquic_rechist_is_empty(&conn->ifc_rechist[pns]);
@ -7522,8 +7545,7 @@ process_regular_packet (struct ietf_full_conn *conn,
<< packet_in->pi_path_id);
}
}
else if (!LSQUIC_CIDS_EQ(CN_SCID(&conn->ifc_conn),
&packet_in->pi_dcid))
else if (is_dcid_changed)
{
if (0 != on_dcid_change(conn, &packet_in->pi_dcid))
return -1;

View file

@ -2437,6 +2437,12 @@ lsquic_stream_dispatch_write_events (lsquic_stream_t *stream)
else
stream_dispatch_write_events_loop(stream);
if ((stream->sm_qflags & SMQF_SEND_BLOCKED) &&
(stream->sm_bflags & SMBF_IETF))
{
lsquic_sendctl_gen_stream_blocked_frame(stream->conn_pub->send_ctl, stream);
}
/* Progress means either flags or offsets changed: */
progress = !((stream->sm_qflags & SMQF_WRITE_Q_FLAGS) == q_flags &&
stream->tosend_off == tosend_off &&