implementation session manager

This commit is contained in:
luwenpeng
2023-12-19 10:47:26 +08:00
parent 2e56bd810c
commit 2c26879182
15 changed files with 2269 additions and 193 deletions

View File

@@ -0,0 +1,77 @@
#include "session_queue.h"
#include "session_private.h"
struct session_queue
{
struct session *head;
struct session *tail;
int count;
};
struct session_queue *session_queue_create()
{
struct session_queue *queue = (struct session_queue *)calloc(1, sizeof(struct session_queue));
if (queue == NULL)
{
return NULL;
}
return queue;
}
void session_queue_destroy(struct session_queue *queue)
{
if (queue)
{
free(queue);
queue = NULL;
}
}
void session_queue_push(struct session_queue *queue, struct session *sess)
{
if (queue == NULL || sess == NULL)
{
return;
}
if (queue->head == NULL)
{
queue->head = sess;
queue->tail = sess;
}
else
{
queue->tail->next_ready_ptr = sess;
queue->tail = sess;
}
sess->next_ready_ptr = NULL;
queue->count++;
}
struct session *session_queue_pop(struct session_queue *queue)
{
if (queue == NULL)
{
return NULL;
}
struct session *sess = queue->head;
if (sess == NULL)
{
return NULL;
}
if (queue->head == queue->tail)
{
queue->head = NULL;
queue->tail = NULL;
}
else
{
queue->head = sess->next_ready_ptr;
}
sess->next_ready_ptr = NULL;
queue->count--;
return sess;
}