mem
This commit is contained in:
1 parent
b2640e7201
commit
15c7968c8c
34 files changed
+332
-284
No files matched your search
+13
-12
@@ -6,6 +6,7 @@
|
||||
#include "ll_queue.h"
|
||||
#include "u_async.h"
|
||||
#include "debug_config.h"
|
||||
#include "mem.h"
|
||||
|
||||
// Предварительные объявления внутренних функций
|
||||
static void queue_resume_timeout_cb(void* arg);
|
||||
@@ -18,7 +19,7 @@ static void remove_from_hash(struct ll_queue* q, struct ll_entry* entry);
|
||||
struct ll_queue* queue_new(struct UASYNC* ua, size_t hash_size) {
|
||||
if (!ua) return NULL;
|
||||
|
||||
struct ll_queue* q = calloc(1, sizeof(struct ll_queue));
|
||||
struct ll_queue* q = u_calloc(1, sizeof(struct ll_queue));
|
||||
if (!q) return NULL;
|
||||
|
||||
q->ua = ua;
|
||||
@@ -27,9 +28,9 @@ struct ll_queue* queue_new(struct UASYNC* ua, size_t hash_size) {
|
||||
|
||||
// Создать хеш-таблицу если нужно
|
||||
if (hash_size > 0) {
|
||||
q->hash_table = calloc(hash_size, sizeof(struct ll_entry*));
|
||||
q->hash_table = u_calloc(hash_size, sizeof(struct ll_entry*));
|
||||
if (!q->hash_table) {
|
||||
free(q);
|
||||
u_free(q);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@@ -45,7 +46,7 @@ struct ll_entry* ll_alloc_lldgram(uint16_t len) {
|
||||
|
||||
entry->len=0;
|
||||
entry->memlen=len;
|
||||
entry->dgram = malloc(len);
|
||||
entry->dgram = u_malloc(len);
|
||||
// entry->dgram_pool = NULL; - уже null (memset)
|
||||
// entry->dgram_free_fn = NULL;
|
||||
if (!entry->dgram) {
|
||||
@@ -63,11 +64,11 @@ void queue_free(struct ll_queue* q) {
|
||||
q, q->head, q->tail, q->count);
|
||||
|
||||
// ВАЖНО: Не освобождаем элементы в очереди - они должны быть извлечены отдельно
|
||||
// Это упрощает архитектуру и предотвращает double-free
|
||||
// Это упрощает архитектуру и предотвращает double-u_free
|
||||
|
||||
// Освободить хеш-таблицу
|
||||
if (q->hash_table) {
|
||||
free(q->hash_table);
|
||||
u_free(q->hash_table);
|
||||
}
|
||||
|
||||
// Отменить отложенное возобновление
|
||||
@@ -76,7 +77,7 @@ void queue_free(struct ll_queue* q) {
|
||||
q->resume_timeout_id = NULL;
|
||||
}
|
||||
|
||||
free(q);
|
||||
u_free(q);
|
||||
}
|
||||
|
||||
// ==================== Конфигурация очереди ====================
|
||||
@@ -118,13 +119,13 @@ void queue_set_size_limit(struct ll_queue* q, int lim) {
|
||||
// ==================== Управление элементами ====================
|
||||
|
||||
struct ll_entry* queue_entry_new(size_t data_size) {
|
||||
struct ll_entry* entry = malloc(sizeof(struct ll_entry) + data_size);
|
||||
struct ll_entry* entry = u_malloc(sizeof(struct ll_entry) + data_size);
|
||||
if (!entry) return NULL;
|
||||
|
||||
memset(entry, 0, sizeof(struct ll_entry) + data_size);
|
||||
entry->size = data_size;
|
||||
entry->len = 0;
|
||||
entry->pool = NULL; // Выделено через malloc
|
||||
entry->pool = NULL; // Выделено через u_malloc
|
||||
|
||||
// DEBUG_DEBUG(DEBUG_CATEGORY_LL_QUEUE, "queue_entry_new: created entry %p, size=%zu", entry, data_size);
|
||||
|
||||
@@ -147,7 +148,7 @@ struct ll_entry* queue_entry_new_from_pool(struct memory_pool* pool) {
|
||||
return entry;
|
||||
}
|
||||
|
||||
//void ll_free_dgram(struct ll_entry* entry) {
|
||||
//void ll_u_free_dgram(struct ll_entry* entry) {
|
||||
void queue_dgram_free(struct ll_entry* entry) {
|
||||
if (!entry) return;
|
||||
|
||||
@@ -157,7 +158,7 @@ void queue_dgram_free(struct ll_entry* entry) {
|
||||
} else if (entry->dgram_pool) {
|
||||
memory_pool_free(entry->dgram_pool, entry->dgram);
|
||||
} else {
|
||||
free(entry->dgram);
|
||||
u_free(entry->dgram);
|
||||
}
|
||||
entry->dgram = NULL;
|
||||
entry->len = 0; // Опционально сброс len
|
||||
@@ -170,7 +171,7 @@ void queue_entry_free(struct ll_entry* entry) {
|
||||
if (entry->pool) {
|
||||
memory_pool_free(entry->pool, entry);
|
||||
} else {
|
||||
free(entry);
|
||||
u_free(entry);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user