myMPD
Internal API documentation
Loading...
Searching...
No Matches
msg_queue.c File Reference

Message queue implementation. More...

#include "src/lib/msg_queue.h"
#include "dist/mongoose/mongoose.h"
#include "src/lib/api.h"
#include "src/lib/event.h"
#include "src/lib/log.h"
#include "src/lib/mem.h"
#include <errno.h>
Include dependency graph for msg_queue.c:

Enumerations

enum  { MSEC_NSEC = 1000000 , SEC_NSEC = 1000000000 , NSEC_MAX = 999999999 }

Functions

static bool check_for_queue_id (struct t_mympd_queue *queue, unsigned id)
static void free_queue_node (struct t_mympd_msg *n, enum mympd_queue_types type)
static int unlock_mutex (pthread_mutex_t *mutex)
static void set_wait_time (int timeout_ms, struct timespec *max_wait)
struct t_mympd_queuemympd_queue_create (const char *name, enum mympd_queue_types type, bool event)
void * mympd_queue_free (struct t_mympd_queue *queue)
bool mympd_queue_push (struct t_mympd_queue *queue, void *data, unsigned id)
void * mympd_queue_shift (struct t_mympd_queue *queue, int timeout_ms, unsigned id)
int mympd_queue_expire_age (struct t_mympd_queue *queue, time_t max_age_s)
bool mympd_mg_wakeup_send (const void *data)

Variables

struct t_mympd_queuewebserver_queue
 Message queue read by webserver thread.
struct t_mympd_queuemympd_api_queue
 Message queue read by mympd_api thread.

Detailed Description

Message queue implementation.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

Time conversion numbers

Function Documentation

◆ check_for_queue_id()

bool check_for_queue_id ( struct t_mympd_queue * queue,
unsigned id )
static

Checks if queue has a entry with requested id

Parameters
queuePointer to the queue
id0 for first entry or specific id
Returns
true if there is an entry, else false

◆ free_queue_node()

void free_queue_node ( struct t_mympd_msg * node,
enum mympd_queue_types type )
static

Frees a queue node, node must be detached from queue

Parameters
nodeto free
typetype of the queue QUEUE_TYPE_REQUEST or QUEUE_TYPE_RESPONSE

◆ mympd_mg_wakeup_send()

bool mympd_mg_wakeup_send ( const void * data)

Sends data to the mongoose thread and wake it up

Parameters
dataData to send - max. one character
Returns
true on success, else false

◆ mympd_queue_create()

struct t_mympd_queue * mympd_queue_create ( const char * name,
enum mympd_queue_types type,
bool event )

Creates a thread safe message queue

Parameters
namedescription of the queue
typetype of the queue QUEUE_TYPE_REQUEST or QUEUE_TYPE_RESPONSE
eventcreate an eventfd?
Returns
pointer to allocated and initialized queue struct

◆ mympd_queue_expire_age()

int mympd_queue_expire_age ( struct t_mympd_queue * queue,
time_t max_age_s )

Expire entries from the queue by age

Parameters
queuepointer to the queue
max_age_smax age of nodes in seconds
Returns
number of expired nodes

◆ mympd_queue_free()

void * mympd_queue_free ( struct t_mympd_queue * queue)

Frees all queue nodes and the queue itself

Parameters
queuepointer to the queue
Returns
NULL

◆ mympd_queue_push()

bool mympd_queue_push ( struct t_mympd_queue * queue,
void * data,
unsigned id )

Appends data to the queue

Parameters
queuepointer to the queue
datastruct t_work_request or t_work_response
idid of the queue entry
Returns
true on success else false

◆ mympd_queue_shift()

void * mympd_queue_shift ( struct t_mympd_queue * queue,
int timeout_ms,
unsigned id )

Gets the first entry or the entry with specific id

Parameters
queuepointer to the queue
timeout_mstimeout in ms to wait for a queue entry, 0 to wait infinite -1 for no wait
id0 for first entry or specific id
Returns
t_work_request or t_work_response

◆ set_wait_time()

void set_wait_time ( int timeout_ms,
struct timespec * max_wait )
static

Populates the timespec struct with time now + timeout

Parameters
timeout_mstimeout in ms
max_waittimespec struct to populate

◆ unlock_mutex()

int unlock_mutex ( pthread_mutex_t * mutex)
static

Unlocks the queue mutex

Parameters
mutexthe mutex to unlock
Returns
0 on success, else 1