mirror of https://github.com/bjornbytes/lovr.git
Event module is thread safe;
This commit is contained in:
parent
40c363fff4
commit
8b3fcc94b8
|
@ -3,7 +3,7 @@
|
|||
|
||||
map_int_t EventTypes;
|
||||
|
||||
static int pollRef;
|
||||
static _Thread_local int pollRef;
|
||||
|
||||
static int nextEvent(lua_State* L) {
|
||||
Event event;
|
||||
|
|
|
@ -9,6 +9,7 @@ void lovrEventInit() {
|
|||
vec_init(&state.pumps);
|
||||
vec_init(&state.events);
|
||||
lovrEventAddPump(glfwPollEvents);
|
||||
mtx_init(&state.lock, mtx_plain);
|
||||
atexit(lovrEventDestroy);
|
||||
state.initialized = true;
|
||||
}
|
||||
|
@ -17,15 +18,20 @@ void lovrEventDestroy() {
|
|||
if (!state.initialized) return;
|
||||
vec_deinit(&state.pumps);
|
||||
vec_deinit(&state.events);
|
||||
mtx_destroy(&state.lock);
|
||||
memset(&state, 0, sizeof(EventState));
|
||||
}
|
||||
|
||||
void lovrEventAddPump(EventPump pump) {
|
||||
mtx_lock(&state.lock);
|
||||
vec_push(&state.pumps, pump);
|
||||
mtx_unlock(&state.lock);
|
||||
}
|
||||
|
||||
void lovrEventRemovePump(EventPump pump) {
|
||||
mtx_lock(&state.lock);
|
||||
vec_remove(&state.pumps, pump);
|
||||
mtx_unlock(&state.lock);
|
||||
}
|
||||
|
||||
void lovrEventPump() {
|
||||
|
@ -36,18 +42,25 @@ void lovrEventPump() {
|
|||
}
|
||||
|
||||
void lovrEventPush(Event event) {
|
||||
mtx_lock(&state.lock);
|
||||
vec_insert(&state.events, 0, event);
|
||||
mtx_unlock(&state.lock);
|
||||
}
|
||||
|
||||
bool lovrEventPoll(Event* event) {
|
||||
mtx_lock(&state.lock);
|
||||
if (state.events.length == 0) {
|
||||
mtx_unlock(&state.lock);
|
||||
return false;
|
||||
}
|
||||
|
||||
*event = vec_pop(&state.events);
|
||||
mtx_unlock(&state.lock);
|
||||
return true;
|
||||
}
|
||||
|
||||
void lovrEventClear() {
|
||||
mtx_lock(&state.lock);
|
||||
vec_clear(&state.events);
|
||||
mtx_unlock(&state.lock);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include "headset/headset.h"
|
||||
#include "thread/thread.h"
|
||||
#include "lib/tinycthread/tinycthread.h"
|
||||
#include "lib/vec/vec.h"
|
||||
#include <stdbool.h>
|
||||
|
||||
|
@ -77,6 +78,7 @@ typedef struct {
|
|||
bool initialized;
|
||||
vec_pump_t pumps;
|
||||
vec_event_t events;
|
||||
mtx_t lock;
|
||||
} EventState;
|
||||
|
||||
void lovrEventInit();
|
||||
|
|
Loading…
Reference in New Issue