Turn Event into a tagged union

If we ever need arbitrary data or more than very few bytes on `Events` we just
have to add a `void *` field in the `data` union.
This commit is contained in:
Felipe Oliveira Carvalho 2014-04-06 00:48:21 -03:00 committed by Thiago de Arruda
parent 967fb1aca6
commit c3cea30cb7
3 changed files with 8 additions and 7 deletions

View File

@ -12,7 +12,7 @@
#include "memory.h"
#include "misc2.h"
// event.data will be cleaned up after the event is processed
// event will be cleaned up after it gets processed
#define _destroy_event(x) // do nothing
KLIST_INIT(Event, Event, _destroy_event)

View File

@ -10,7 +10,9 @@ typedef enum {
typedef struct {
EventType type;
void *data;
union {
int signum;
} data;
} Event;
void event_init(void);

View File

@ -69,9 +69,7 @@ void signal_accept_deadly()
void signal_handle(Event event)
{
int signum = *(int *)event.data;
free(event.data);
int signum = event.data.signum;
switch (signum) {
case SIGINT:
@ -157,8 +155,9 @@ static void signal_cb(uv_signal_t *handle, int signum)
Event event = {
.type = kEventSignal,
.data = xmalloc(sizeof(int))
.data = {
.signum = signum
}
};
*(int *)event.data = signum;
event_push(event);
}