#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; }