implementation session manager
This commit is contained in:
77
src/session/session_queue.cpp
Normal file
77
src/session/session_queue.cpp
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user