mirror of https://github.com/bjornbytes/lovr.git
Fix crash on repeated calls to Channel:peek;
This commit is contained in:
parent
5382bc3379
commit
aa56cbc7b0
|
@ -57,8 +57,8 @@ int luax_pushvariant(lua_State* L, Variant* variant) {
|
|||
case TYPE_NIL: lua_pushnil(L); return 1;
|
||||
case TYPE_BOOLEAN: lua_pushboolean(L, variant->value.boolean); return 1;
|
||||
case TYPE_NUMBER: lua_pushnumber(L, variant->value.number); return 1;
|
||||
case TYPE_STRING: lua_pushstring(L, variant->value.string); free(variant->value.string); return 1;
|
||||
case TYPE_OBJECT: luax_pushobject(L, variant->value.ref); lovrRelease(variant->value.ref); return 1;
|
||||
case TYPE_STRING: lua_pushstring(L, variant->value.string); return 1;
|
||||
case TYPE_OBJECT: luax_pushobject(L, variant->value.ref); return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -109,7 +109,9 @@ static int nextEvent(lua_State* L) {
|
|||
|
||||
case EVENT_CUSTOM:
|
||||
for (int i = 0; i < event.data.custom.count; i++) {
|
||||
luax_pushvariant(L, &event.data.custom.data[i]);
|
||||
Variant* variant = &event.data.custom.data[i];
|
||||
luax_pushvariant(L, variant);
|
||||
lovrVariantDestroy(variant);
|
||||
}
|
||||
return event.data.custom.count + 1;
|
||||
|
||||
|
|
|
@ -37,7 +37,9 @@ int l_lovrChannelPop(lua_State* L) {
|
|||
Channel* channel = luax_checktype(L, 1, Channel);
|
||||
luax_checktimeout(L, 2, &timeout);
|
||||
if (lovrChannelPop(channel, &variant, timeout)) {
|
||||
return luax_pushvariant(L, &variant);
|
||||
luax_pushvariant(L, &variant);
|
||||
lovrVariantDestroy(&variant);
|
||||
return 1;
|
||||
}
|
||||
lua_pushnil(L);
|
||||
return 1;
|
||||
|
|
|
@ -5,6 +5,14 @@
|
|||
|
||||
static EventState state;
|
||||
|
||||
void lovrVariantDestroy(Variant* variant) {
|
||||
switch (variant->type) {
|
||||
case TYPE_STRING: free(variant->value.string); return;
|
||||
case TYPE_OBJECT: lovrRelease(variant->value.ref); return;
|
||||
default: return;
|
||||
}
|
||||
}
|
||||
|
||||
bool lovrEventInit() {
|
||||
if (state.initialized) return false;
|
||||
vec_init(&state.pumps);
|
||||
|
|
|
@ -90,6 +90,8 @@ typedef struct {
|
|||
vec_event_t events;
|
||||
} EventState;
|
||||
|
||||
void lovrVariantDestroy(Variant* variant);
|
||||
|
||||
bool lovrEventInit();
|
||||
void lovrEventDestroy();
|
||||
void lovrEventAddPump(EventPump pump);
|
||||
|
|
Loading…
Reference in New Issue