commit bc9a93d25688ab357df77e6c2bb7cf18129b38eb
parent 4ce4f3a5c9d1258666ec1e2780200c44671c14b9
Author: Evgeny Grin (Karlson2k) <k2k@drgrin.dev>
Date: Mon, 8 Dec 2025 21:39:53 +0100
HTTP/1.x connection processing: sorted suspend/resume and data processing
Diffstat:
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/src/mhd2/stream_process_states.c b/src/mhd2/stream_process_states.c
@@ -331,11 +331,18 @@ mhd_conn_process_data (struct MHD_Connection *restrict c)
struct MHD_Daemon *const d = c->daemon;
bool daemon_closing;
+ if (c->suspended)
+ {
+ mhd_assert (! mhd_C_IS_HTTP2 (c));
+ return true;
+ }
+
switch (process_http_comm_layer (c))
{
case mhd_COMM_LAYER_OK:
break; /* Process HTTP data */
case mhd_COMM_LAYER_PROCESSING:
+ mhd_assert (! c->resuming);
return true; /* Too early for HTTP */
case mhd_COMM_LAYER_BROKEN:
mhd_assert (c->dbg.closing_started);
@@ -345,6 +352,12 @@ mhd_conn_process_data (struct MHD_Connection *restrict c)
return false;
}
+ if (c->resuming)
+ {
+ mhd_assert (! mhd_C_IS_HTTP2 (c));
+ finish_resume (c);
+ }
+
#ifdef MHD_SUPPORT_HTTP2
if (mhd_C_IS_HTTP2 (c))
{
@@ -358,9 +371,6 @@ mhd_conn_process_data (struct MHD_Connection *restrict c)
mhd_assert (mhd_D_IS_HTTP1_ENABLED (d) || (! mhd_C_IS_HTTP2 (c)) || \
c->stop_with_error);
- if (c->suspended)
- return true;
-
if ((c->sk.state.rmt_shut_wr) && (mhd_HTTP_STAGE_START_REPLY > c->stage))
{
if (0 == c->read_buffer_offset)
@@ -374,9 +384,6 @@ mhd_conn_process_data (struct MHD_Connection *restrict c)
}
}
- if (c->resuming)
- finish_resume (c);
-
mhd_assert ((! mhd_SCKT_NET_ST_HAS_FLAG (c->sk.ready,
mhd_SOCKET_NET_STATE_ERROR_READY))
|| (mhd_SOCKET_ERR_NO_ERROR == c->sk.state.discnt_err));