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:
1 parent
331d43c6f7
commit
2a259191b9
3 files changed
+35
-7
No files matched your search
@@ -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 очередь
|
||||
|
||||
Reference in new issue
Block a user