Backup before fixing dgram_pool initialization
This commit is contained in:
1 parent
ed7f3d8974
commit
98c43e6fb6
19 files changed
+217
-1455
No files matched your search
+24
-34
@@ -81,18 +81,29 @@ struct ll_queue* queue_new(struct UASYNC* ua, size_t hash_size);
|
||||
// Элементы должны быть предварительно извлечены через queue_data_get() и освобождены через queue_data_free()
|
||||
void queue_free(struct ll_queue* q);
|
||||
|
||||
// выделить ll_entry и память под кодограмму
|
||||
struct ll_entry* ll_alloc_lldgram(uint16_t len);
|
||||
// Установить максимальное количество элементов в очереди
|
||||
// При превышении лимита новый элемент автоматически освобождается
|
||||
void queue_set_size_limit(struct ll_queue* q, int lim);
|
||||
|
||||
// Функция для освобождения только dgram в ll_entry
|
||||
// Принимает void* data (как возвращается из queue_entry_new или queue_data_get)
|
||||
// Освобождает dgram с использованием dgram_pool (если указан) или free (если нет)
|
||||
// Если есть dgram_free_fn, использует её; иначе - pool или free
|
||||
// Устанавливает dgram в NULL после освобождения
|
||||
// Не освобождает саму структуру ll_entry
|
||||
//void ll_free_dgram(struct ll_entry*);
|
||||
// ==================== Асинхронное ожидание передачи ====================
|
||||
|
||||
// ==================== Конфигурация очереди ====================
|
||||
// Зарегистрировать одноразовый коллбэк, который будет вызван когда очередь будет иметь
|
||||
// не более max_packets пакетов и не более max_bytes байт (если max_bytes != 0).
|
||||
// Если условие уже выполнено, коллбэк вызывается немедленно.
|
||||
// Возвращает указатель на waiter для возможной отмены через queue_cancel_wait
|
||||
struct queue_waiter* queue_wait_threshold(struct ll_queue* q, int max_packets, size_t max_bytes,
|
||||
queue_threshold_callback_fn callback, void* arg);
|
||||
|
||||
// Отменить ожидание (удалить waiter из списка)
|
||||
void queue_cancel_wait(struct ll_queue* q, struct queue_waiter* waiter);
|
||||
|
||||
// Получить общий размер данных в очереди (байт)
|
||||
static inline size_t queue_total_bytes(struct ll_queue* q) {
|
||||
if (!q) return 0;
|
||||
return q->total_bytes;
|
||||
}
|
||||
|
||||
// ==================== Асинхронное ожидание приёма ====================
|
||||
|
||||
// Установить функцию и аргумент коллбэка для автозабора из очереди
|
||||
// Коллбэк вызывается когда в очереди есть элемент и разрешен коллбэк
|
||||
@@ -105,12 +116,11 @@ void queue_set_callback(struct ll_queue* q, queue_callback_fn cbk_fn, void* arg)
|
||||
// Это предотвращает накопление рекурсии в стеке вызовов
|
||||
void queue_resume_callback(struct ll_queue* q);
|
||||
|
||||
// Установить максимальное количество элементов в очереди
|
||||
// При превышении лимита новый элемент автоматически освобождается
|
||||
void queue_set_size_limit(struct ll_queue* q, int lim);
|
||||
|
||||
// ==================== Управление элементами ====================
|
||||
|
||||
// выделить ll_entry и память под кодограмму
|
||||
struct ll_entry* ll_alloc_lldgram(uint16_t len);
|
||||
|
||||
// Создать новый элемент с областью данных указанного размера
|
||||
// Память выделяется одним блоком: [struct ll_entry][область данных data_size байт]
|
||||
// Возвращает: указатель на структуру элемента (struct ll_entry*) или NULL при ошибке выделения памяти
|
||||
@@ -148,26 +158,6 @@ struct ll_entry* queue_data_get(struct ll_queue* q);
|
||||
// Получить текущее количество элементов в очереди
|
||||
int queue_entry_count(struct ll_queue* q);
|
||||
|
||||
// ==================== Вспомогательные функции ====================
|
||||
|
||||
// ==================== Асинхронное ожидание ====================
|
||||
|
||||
// Зарегистрировать одноразовый коллбэк, который будет вызван когда очередь будет иметь
|
||||
// не более max_packets пакетов и не более max_bytes байт (если max_bytes != 0).
|
||||
// Если условие уже выполнено, коллбэк вызывается немедленно.
|
||||
// Возвращает указатель на waiter для возможной отмены через queue_cancel_wait
|
||||
struct queue_waiter* queue_wait_threshold(struct ll_queue* q, int max_packets, size_t max_bytes,
|
||||
queue_threshold_callback_fn callback, void* arg);
|
||||
|
||||
// Отменить ожидание (удалить waiter из списка)
|
||||
void queue_cancel_wait(struct ll_queue* q, struct queue_waiter* waiter);
|
||||
|
||||
// Получить общий размер данных в очереди (байт)
|
||||
static inline size_t queue_total_bytes(struct ll_queue* q) {
|
||||
if (!q) return 0;
|
||||
return q->total_bytes;
|
||||
}
|
||||
|
||||
// ==================== Поиск и удаление по ID ====================
|
||||
|
||||
// Найти элемент по ID
|
||||
|
||||
Reference in new issue
Block a user