77 lines
1.3 KiB
C++
77 lines
1.3 KiB
C++
#include "session_queue.h"
|
|
#include "session_private.h"
|
|
|
|
struct session_queue
|
|
{
|
|
struct session *head;
|
|
struct session *tail;
|
|
int count;
|
|
};
|
|
|
|
struct session_queue *session_queue_new()
|
|
{
|
|
struct session_queue *queue = (struct session_queue *)calloc(1, sizeof(struct session_queue));
|
|
if (queue == NULL)
|
|
{
|
|
return NULL;
|
|
}
|
|
return queue;
|
|
}
|
|
|
|
void session_queue_free(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;
|
|
} |