diff --git a/system/lib/html5/callback.c b/system/lib/html5/callback.c
index 1bec1ea783470..0e7b478c0365c 100644
--- a/system/lib/html5/callback.c
+++ b/system/lib/html5/callback.c
@@ -21,6 +21,7 @@ typedef struct callback_args_t {
static void do_callback(void* arg) {
callback_args_t* args = (callback_args_t*)arg;
args->callback(args->event_type, args->event_data, args->user_data);
+ free(arg);
}
void _emscripten_run_callback_on_thread(pthread_t t,
@@ -29,14 +30,13 @@ void _emscripten_run_callback_on_thread(pthread_t t,
void* event_data,
void* user_data) {
em_proxying_queue* q = emscripten_proxy_get_system_queue();
- callback_args_t arg = {
- .callback = f,
- .event_type = event_type,
- .event_data = event_data,
- .user_data = user_data,
- };
+ callback_args_t* arg = malloc(sizeof(callback_args_t));
+ arg->callback = f;
+ arg->event_type = event_type;
+ arg->event_data = event_data;
+ arg->user_data = user_data;
- if (!emscripten_proxy_sync(q, t, do_callback, &arg)) {
- assert(false && "emscripten_proxy_sync failed");
+ if (!emscripten_proxy_async(q, t, do_callback, arg)) {
+ assert(false && "emscripten_proxy_async failed");
}
}