feat: queue_set_waiter_defer — immediate or call_soon callback mode

queue_waiter_handle stores defer_q/cb/arg, no extra malloc.
queue_set_waiter_defer(q, 1) enables call_soon dispatch for waiter callbacks.
bbr_integration uses it instead of manual send_waiter_cb wrapper.
This commit is contained in:
Evgeny committed 2026-06-03 02:18:46 +03:00
1 parent 331d43c6f7
commit 2a259191b9
3 files changed
+35 -7

No files matched your search

+6
View File
@@ -114,6 +114,9 @@ struct queue_waiter {
*/
struct queue_waiter_handle {
struct queue_waiter* internal; ///< NULL = не ждём; иначе — внутренний узел
struct ll_queue* defer_q;
queue_threshold_callback_fn defer_cb;
void* defer_arg;
};
/**
@@ -139,6 +142,7 @@ struct ll_queue {
struct queue_waiter* waiter_tail; // Хвост списка ожидающих
int threshold_max_packets; // Общий порог: макс. кол-во элементов (по умолчанию 0)
size_t threshold_max_bytes; // Общий порог: макс. объём данных (0 = не проверять)
int waiter_defer; // 0=immediate callback, 1=defer via uasync_call_soon
struct ll_entry** hash_table; // Хеш-таблица для поиска по id (если hash_size > 0)
size_t hash_size; // Размер хеш-таблицы
@@ -222,6 +226,8 @@ void queue_resume_callback(struct ll_queue* q);
*/
void queue_set_threshold(struct ll_queue* q, int max_packets, size_t max_bytes);
void queue_set_waiter_defer(struct ll_queue* q, int enable);
/**
* @brief Регистрирует ожидание освобождения очереди до общего порога.
* @param q очередь