Stop packet construction when input callbacks restart the stream
This commit is contained in:
1 parent
77a737fd71
commit
7c09bfca7f
2 files changed
+4
No files matched your search
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in new issue
Block a user