forked from membase/libconflate
/
alarm.c
64 lines (57 loc) · 1.5 KB
/
alarm.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
#include <assert.h>
#include "alarm.h"
/* read alarm from queue, if there is none simply return an empty alert with ->open = 0 */
alarm_t get_alarm(alarm_queue_t *queue)
{
assert(queue);
pthread_mutex_lock(&(queue->mutex));
alarm_t alarm;
if(queue->size == 0) {
alarm.open = false;
alarm.msg[0] = 0x00;
} else {
alarm = queue->queue[queue->out];
queue->size--;
queue->out++;
queue->out %= ALARM_QUEUE_SIZE;
}
pthread_mutex_unlock(&(queue->mutex));
return alarm;
}
/* add an alarm to the queue */
bool add_alarm(alarm_queue_t *queue, const char *name, const char *msg)
{
assert(queue);
assert(name);
assert(msg);
bool rv = false;
pthread_mutex_lock(&(queue->mutex));
if (queue->size < ALARM_QUEUE_SIZE) {
alarm_t *alarm = &queue->queue[queue->in];
alarm->open = true;
alarm->num = queue->num;
strncpy(alarm->name, name, ALARM_NAME_MAXLEN);
strncpy(alarm->msg, msg, ALARM_MSG_MAXLEN);
queue->size++;
queue->in++;
queue->num++;
queue->in %= ALARM_QUEUE_SIZE;
rv = true;
}
pthread_mutex_unlock(&(queue->mutex));
return rv;
}
/* set up thread safe FIFO queue for alarm structs */
alarm_queue_t *init_alarmqueue(void)
{
alarm_queue_t *rv = calloc(1, sizeof(alarm_queue_t));
assert(rv);
return rv;
}
void destroy_alarmqueue(alarm_queue_t *queue)
{
free(queue);
}