From 17f1bb730d691b651c34483ee6b3c743e7c9264a Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Fri, 23 Aug 2024 08:02:22 +0200 Subject: [PATCH] Make _emscripten_run_callback_on_thread asynchronous ...fixing a regression introduced in c41f6590b1f9fcda12b2adb2d32cd352f163e717 "Remove use of legacy proxy API from library_html5.js. NFC (#20370)". Fixes: #22442 --- system/lib/html5/callback.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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"); } }