Replace session queue with kernel list

This commit is contained in:
luwenpeng
2024-03-29 17:45:41 +08:00
parent 6e422ecb8d
commit 8e527a0f4c
12 changed files with 60 additions and 241 deletions

View File

@@ -4,7 +4,7 @@
struct session_pool
{
uint64_t count;
struct session *sess;
struct list_head free_queue;
};
struct session_pool *session_pool_new(uint64_t count)
@@ -14,15 +14,15 @@ struct session_pool *session_pool_new(uint64_t count)
{
return NULL;
}
INIT_LIST_HEAD(&pool->free_queue);
pool->count = count;
pool->sess = (struct session *)(pool + 1);
struct session *array = (struct session *)(pool + 1);
for (uint64_t i = 0; i < count; i++)
{
pool->sess[i].next_free_ptr = &pool->sess[i + 1];
struct session *sess = &array[i];
list_add_tail(&sess->free, &pool->free_queue);
pool->count++;
}
pool->sess[count - 1].next_free_ptr = NULL;
return pool;
}
@@ -31,6 +31,13 @@ void session_pool_free(struct session_pool *pool)
{
if (pool)
{
while (!list_empty(&pool->free_queue))
{
struct session *sess = list_first_entry(&pool->free_queue, struct session, free);
list_del(&sess->free);
pool->count--;
}
free(pool);
pool = NULL;
}
@@ -43,14 +50,13 @@ struct session *session_pool_pop(struct session_pool *pool)
return NULL;
}
struct session *sess = pool->sess;
if (sess == NULL)
if (list_empty(&pool->free_queue))
{
return NULL;
}
pool->sess = sess->next_free_ptr;
sess->next_free_ptr = NULL;
struct session *sess = list_first_entry(&pool->free_queue, struct session, free);
list_del(&sess->free);
pool->count--;
return sess;
@@ -63,8 +69,7 @@ void session_pool_push(struct session_pool *pool, struct session *sess)
return;
}
sess->next_free_ptr = pool->sess;
pool->sess = sess;
list_add_tail(&sess->free, &pool->free_queue);
pool->count++;
}