|
|
|
|
@ -388,16 +388,16 @@ int etcp_int_send(struct ETCP_CONN* etcp, const void* data, uint16_t len) {
|
|
|
|
|
static void input_queue_try_resume(struct ETCP_CONN* etcp) { |
|
|
|
|
DEBUG_TRACE(DEBUG_CATEGORY_ETCP, ""); |
|
|
|
|
|
|
|
|
|
// если размер input_wait_ack+input_send_q в байтах < optimal_inflight то resume сейчас.
|
|
|
|
|
size_t wait_ack_bytes = queue_total_bytes(etcp->input_wait_ack); |
|
|
|
|
// Сперва отправим всё из очереди отправки
|
|
|
|
|
size_t send_q_bytes = queue_total_bytes(etcp->input_send_q); |
|
|
|
|
size_t total_bytes = wait_ack_bytes + send_q_bytes; |
|
|
|
|
queue_resume_callback(etcp->input_send_q);// вызвать лишний раз resume не страшно.
|
|
|
|
|
if (send_q_bytes>0) return; |
|
|
|
|
|
|
|
|
|
if (total_bytes <= etcp->optimal_inflight || send_q_bytes>0) { |
|
|
|
|
DEBUG_DEBUG(DEBUG_CATEGORY_ETCP, "[%s] resume callbacks: inflight_bytes=%d, input_len=%d", etcp->log_name, total_bytes, etcp->input_queue->total_bytes); |
|
|
|
|
queue_resume_callback(etcp->input_send_q);// вызвать лишний раз resume не страшно.
|
|
|
|
|
//etcp_stats(etcp);
|
|
|
|
|
if (queue_entry_count(etcp->input_send_q) == 0) queue_resume_callback(etcp->input_queue);// и только когда больше нечего отправлять - забираем новый пакет
|
|
|
|
|
// когда очередь отправки пуста - пробуем взять новый пакет на обработку
|
|
|
|
|
size_t wait_ack_bytes = queue_total_bytes(etcp->input_wait_ack); |
|
|
|
|
if (wait_ack_bytes <= etcp->optimal_inflight) { |
|
|
|
|
DEBUG_DEBUG(DEBUG_CATEGORY_ETCP, "[%s] resume input queue: inflight_bytes=%d, input_len=%d", etcp->log_name, wait_ack_bytes, etcp->input_queue->total_bytes); |
|
|
|
|
queue_resume_callback(etcp->input_queue);// и только когда больше нечего отправлять - забираем новый пакет
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -494,7 +494,6 @@ static void input_queue_cb(struct ll_queue* q, void* arg) {
|
|
|
|
|
// DEBUG_DEBUG(DEBUG_CATEGORY_ETCP, "input_queue_cb: successfully moved from input_queue to input_send_q");
|
|
|
|
|
|
|
|
|
|
etcp_conn_process_send_queue(etcp);// сразу обработаем этот пакет
|
|
|
|
|
// input_queue_try_resume(etcp);
|
|
|
|
|
DEBUG_DEBUG(DEBUG_CATEGORY_ETCP, "[%s] nextloop, input_queue size=%d ", etcp->log_name, q->count); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -594,7 +593,7 @@ struct ETCP_DGRAM* etcp_request_pkt(struct ETCP_CONN* etcp) {
|
|
|
|
|
if (send_q_size == 0) {// сгребаем из input_queue
|
|
|
|
|
// DEBUG_DEBUG(DEBUG_CATEGORY_ETCP, "etcp_request_pkt: input_send_q empty, check if avail input_queue -> inflight");
|
|
|
|
|
input_queue_try_resume(etcp); |
|
|
|
|
// return NULL;
|
|
|
|
|
return NULL; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// First, check if there's a packet in input_send_q (retrans or new)
|
|
|
|
|
|