Stop packet construction when input callbacks restart the stream

This commit is contained in:
evgeny committed 2026-10-23 19:26:00 +02:00
1 parent 77a737fd71
commit 7c09bfca7f
2 files changed
+4

No files matched your search

+2
View File
@@ -1015,6 +1015,8 @@ struct ETCP_DGRAM* etcp_request_pkt(struct ETCP_CONN* conn) {
return NULL;
}
if (!conn->input_send_q->head) input_queue_try_push(conn);
// Callback input_queue мог сменить эпоху при исчерпании seq или OOM; старый проход отправки прекращается.
if (conn->close_requested || conn->state == 2 || !conn->initialized || conn->session_required || conn->reinit_pending) return NULL;
struct INFLIGHT_PACKET* packet = (struct INFLIGHT_PACKET*)conn->input_send_q->head;
struct ETCP_LINK* link = NULL;
for (struct ETCP_LINK* candidate = conn->links; candidate; candidate = candidate->next)
+2
View File
@@ -1075,6 +1075,8 @@ static void compact_sequence_exhaustion(void) {
memory_pool_free(inst.pkt_pool,pkt);
uint64_t epoch = conn->reset_id;
CHECK(etcp_int_send(conn,normalized,sizeof(normalized)) == 0);
CHECK(conn->input_queue->count == 1); a->burst_active = 1;
CHECK(!request()); // input_queue callback выполняется при следующем проходе отправителя.
CHECK(conn->reset_id != epoch && conn->reinit_pending && conn->session_required && conn->next_tx_id == 1);
CHECK(!conn->active_attempts && !conn->unacked_bytes && !conn->input_queue->count);
confirm_test_session(); teardown();