summaryrefslogtreecommitdiff
path: root/src/signal.c
blob: f223428933be9e7b47ff1a4e4144f7936a0d5aa2 (plain)
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
#include "signal.h"

static void signal_callback(struct ev_loop *loop, ev_async *w, s32 revents)
{
    (void)loop;
    struct nn_signal *signal = (struct nn_signal *)w->data;
    (void)revents;
    signal->callback(signal->userdata);
}

void nn_signal_init(struct nn_signal *signal, struct nn_event_loop *loop,
    void (*callback)(void *), void *userdata)
{
    signal->loop = loop;
    signal->callback = callback;
    signal->userdata = userdata;
    signal->signal.data = signal;
    ev_async_init_n(&signal->signal, signal_callback);
}

void nn_signal_start(struct nn_signal *signal)
{
    ev_async_start(signal->loop->ev, &signal->signal);
}

void nn_signal_send(struct nn_signal *signal)
{
    ev_async_send(signal->loop->ev, &signal->signal);
}

void nn_signal_stop(struct nn_signal *signal)
{
    ev_async_stop(signal->loop->ev, &signal->signal);
}