This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
stellar-stellar/src/session/session_pool.cpp

83 lines
1.6 KiB
C++
Raw Normal View History

2023-12-11 16:27:39 +08:00
#include "session_pool.h"
struct session_pool
{
uint64_t count;
2024-03-29 17:45:41 +08:00
struct list_head free_queue;
2023-12-11 16:27:39 +08:00
};
struct session_pool *session_pool_new(uint64_t count)
2023-12-11 16:27:39 +08:00
{
struct session_pool *pool = (struct session_pool *)calloc(1, sizeof(struct session_pool) + count * sizeof(struct session));
if (pool == NULL)
{
return NULL;
}
2024-03-29 17:45:41 +08:00
INIT_LIST_HEAD(&pool->free_queue);
2023-12-11 16:27:39 +08:00
2024-03-29 17:45:41 +08:00
struct session *array = (struct session *)(pool + 1);
2023-12-11 16:27:39 +08:00
for (uint64_t i = 0; i < count; i++)
{
2024-03-29 17:45:41 +08:00
struct session *sess = &array[i];
list_add_tail(&sess->free, &pool->free_queue);
pool->count++;
2023-12-11 16:27:39 +08:00
}
return pool;
}
void session_pool_free(struct session_pool *pool)
2023-12-11 16:27:39 +08:00
{
if (pool)
{
2024-03-29 17:45:41 +08:00
while (!list_empty(&pool->free_queue))
{
struct session *sess = list_first_entry(&pool->free_queue, struct session, free);
list_del(&sess->free);
pool->count--;
}
2023-12-11 16:27:39 +08:00
free(pool);
pool = NULL;
}
}
struct session *session_pool_pop(struct session_pool *pool)
2023-12-11 16:27:39 +08:00
{
if (pool == NULL)
{
return NULL;
}
2024-03-29 17:45:41 +08:00
if (list_empty(&pool->free_queue))
2023-12-11 16:27:39 +08:00
{
return NULL;
}
2024-03-29 17:45:41 +08:00
struct session *sess = list_first_entry(&pool->free_queue, struct session, free);
list_del(&sess->free);
2023-12-11 16:35:26 +08:00
pool->count--;
2023-12-11 16:27:39 +08:00
return sess;
}
void session_pool_push(struct session_pool *pool, struct session *sess)
2023-12-11 16:27:39 +08:00
{
if (pool == NULL || sess == NULL)
{
return;
}
2024-03-29 17:45:41 +08:00
list_add_tail(&sess->free, &pool->free_queue);
2023-12-11 16:35:26 +08:00
pool->count++;
}
uint64_t session_pool_get_count(struct session_pool *pool)
{
if (pool == NULL)
{
return 0;
}
return pool->count;
2023-12-11 16:27:39 +08:00
}