Skip to content

Commit c41f659

Browse files
authored
Remove use of legacy proxy API from library_html5.js. NFC (#20370)
AFAICT this is the final usage of the legacy proxy API within emscripten.
1 parent efc13c6 commit c41f659

File tree

6 files changed

+64
-59
lines changed

6 files changed

+64
-59
lines changed

src/generated_struct_info32.json

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -202,20 +202,12 @@
202202
"EMULTIHOP": 36,
203203
"EM_CALLBACK_THREAD_CONTEXT_CALLING_THREAD": 2,
204204
"EM_CALLBACK_THREAD_CONTEXT_MAIN_RUNTIME_THREAD": 1,
205-
"EM_FUNC_SIG_I": 536870912,
206-
"EM_FUNC_SIG_II": 570425344,
207-
"EM_FUNC_SIG_III": 603979776,
208-
"EM_FUNC_SIG_IIII": 637534208,
209205
"EM_FUNC_SIG_PARAM_B": 4,
210206
"EM_FUNC_SIG_PARAM_D": 3,
211207
"EM_FUNC_SIG_PARAM_F": 2,
212208
"EM_FUNC_SIG_PARAM_F2I": 5,
213209
"EM_FUNC_SIG_PARAM_I": 0,
214210
"EM_FUNC_SIG_PARAM_I64": 1,
215-
"EM_FUNC_SIG_V": 0,
216-
"EM_FUNC_SIG_VI": 33554432,
217-
"EM_FUNC_SIG_VII": 67108864,
218-
"EM_FUNC_SIG_VIII": 100663296,
219211
"EM_HTML5_LONG_STRING_LEN_BYTES": 128,
220212
"EM_HTML5_MEDIUM_STRING_LEN_BYTES": 64,
221213
"EM_HTML5_SHORT_STRING_LEN_BYTES": 32,

src/generated_struct_info64.json

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -202,20 +202,12 @@
202202
"EMULTIHOP": 36,
203203
"EM_CALLBACK_THREAD_CONTEXT_CALLING_THREAD": 2,
204204
"EM_CALLBACK_THREAD_CONTEXT_MAIN_RUNTIME_THREAD": 1,
205-
"EM_FUNC_SIG_I": 536870912,
206-
"EM_FUNC_SIG_II": 570425344,
207-
"EM_FUNC_SIG_III": 603979776,
208-
"EM_FUNC_SIG_IIII": 637534208,
209205
"EM_FUNC_SIG_PARAM_B": 4,
210206
"EM_FUNC_SIG_PARAM_D": 3,
211207
"EM_FUNC_SIG_PARAM_F": 2,
212208
"EM_FUNC_SIG_PARAM_F2I": 5,
213209
"EM_FUNC_SIG_PARAM_I": 0,
214210
"EM_FUNC_SIG_PARAM_I64": 1,
215-
"EM_FUNC_SIG_V": 0,
216-
"EM_FUNC_SIG_VI": 33554432,
217-
"EM_FUNC_SIG_VII": 67108864,
218-
"EM_FUNC_SIG_VIII": 100663296,
219211
"EM_HTML5_LONG_STRING_LEN_BYTES": 128,
220212
"EM_HTML5_MEDIUM_STRING_LEN_BYTES": 64,
221213
"EM_HTML5_SHORT_STRING_LEN_BYTES": 32,

src/library_html5.js

Lines changed: 21 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
var LibraryHTML5 = {
88
$JSEvents__deps: ['$withStackSave',
99
#if PTHREADS
10-
'emscripten_dispatch_to_thread_',
10+
'_emscripten_run_callback_on_thread',
1111
#endif
1212
],
1313
$JSEvents: {
@@ -208,19 +208,6 @@ var LibraryHTML5 = {
208208
return {{{ cDefs.EMSCRIPTEN_RESULT_SUCCESS }}};
209209
},
210210

211-
#if PTHREADS
212-
// TODO: Support proxied events for MEMORY64
213-
queueEventHandlerOnThread_iiii(targetThread, eventHandlerFunc, eventTypeId, eventData, userData) {
214-
withStackSave(() => {
215-
var varargs = stackAlloc(12);
216-
{{{ makeSetValue('varargs', 0, 'eventTypeId', 'i32') }}};
217-
{{{ makeSetValue('varargs', 4, 'eventData', 'i32') }}};
218-
{{{ makeSetValue('varargs', 8, 'userData', 'i32') }}};
219-
_emscripten_dispatch_to_thread_(targetThread, {{{ cDefs.EM_FUNC_SIG_IIII }}}, eventHandlerFunc, eventData, varargs);
220-
});
221-
},
222-
#endif
223-
224211
#if PTHREADS
225212
getTargetThreadForEventCallback(targetThread) {
226213
switch (targetThread) {
@@ -305,7 +292,7 @@ var LibraryHTML5 = {
305292
stringToUTF8(e.locale || '', keyEventData + {{{ C_STRUCTS.EmscriptenKeyboardEvent.locale }}}, {{{ cDefs.EM_HTML5_SHORT_STRING_LEN_BYTES }}});
306293

307294
#if PTHREADS
308-
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, keyEventData, userData);
295+
if (targetThread) __emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, keyEventData, userData);
309296
else
310297
#endif
311298
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, keyEventData, userData)) e.preventDefault();
@@ -545,7 +532,7 @@ var LibraryHTML5 = {
545532
if (targetThread) {
546533
var mouseEventData = _malloc({{{ C_STRUCTS.EmscriptenMouseEvent.__size__ }}}); // This allocated block is passed as satellite data to the proxied function call, so the call frees up the data block when done.
547534
fillMouseEventData(mouseEventData, e, target);
548-
JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, mouseEventData, userData);
535+
__emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, mouseEventData, userData);
549536
} else
550537
#endif
551538
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, JSEvents.mouseEvent, userData)) e.preventDefault();
@@ -644,7 +631,7 @@ var LibraryHTML5 = {
644631
{{{ makeSetValue('wheelEvent', C_STRUCTS.EmscriptenWheelEvent.deltaZ, 'e["deltaZ"]', 'double') }}};
645632
{{{ makeSetValue('wheelEvent', C_STRUCTS.EmscriptenWheelEvent.deltaMode, 'e["deltaMode"]', 'i32') }}};
646633
#if PTHREADS
647-
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, wheelEvent, userData);
634+
if (targetThread) __emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, wheelEvent, userData);
648635
else
649636
#endif
650637
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, wheelEvent, userData)) e.preventDefault();
@@ -745,7 +732,7 @@ var LibraryHTML5 = {
745732
{{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.scrollTop, 'pageXOffset', 'i32') }}};
746733
{{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.scrollLeft, 'pageYOffset', 'i32') }}};
747734
#if PTHREADS
748-
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, uiEvent, userData);
735+
if (targetThread) __emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, uiEvent, userData);
749736
else
750737
#endif
751738
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, uiEvent, userData)) e.preventDefault();
@@ -791,7 +778,7 @@ var LibraryHTML5 = {
791778
stringToUTF8(id, focusEvent + {{{ C_STRUCTS.EmscriptenFocusEvent.id }}}, {{{ cDefs.EM_HTML5_LONG_STRING_LEN_BYTES }}});
792779

793780
#if PTHREADS
794-
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, focusEvent, userData);
781+
if (targetThread) __emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, focusEvent, userData);
795782
else
796783
#endif
797784
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, focusEvent, userData)) e.preventDefault();
@@ -853,7 +840,7 @@ var LibraryHTML5 = {
853840
if (targetThread) {
854841
var deviceOrientationEvent = _malloc({{{ C_STRUCTS.EmscriptenDeviceOrientationEvent.__size__ }}});
855842
fillDeviceOrientationEventData(deviceOrientationEvent, e, target);
856-
JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, deviceOrientationEvent, userData);
843+
__emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, deviceOrientationEvent, userData);
857844
} else
858845
#endif
859846
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, JSEvents.deviceOrientationEvent, userData)) e.preventDefault();
@@ -923,7 +910,7 @@ var LibraryHTML5 = {
923910
if (targetThread) {
924911
var deviceMotionEvent = _malloc({{{ C_STRUCTS.EmscriptenDeviceMotionEvent.__size__ }}});
925912
fillDeviceMotionEventData(deviceMotionEvent, e, target);
926-
JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, deviceMotionEvent, userData);
913+
__emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, deviceMotionEvent, userData);
927914
} else
928915
#endif
929916
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, JSEvents.deviceMotionEvent, userData)) e.preventDefault();
@@ -993,7 +980,7 @@ var LibraryHTML5 = {
993980
fillOrientationChangeEventData(orientationChangeEvent);
994981

995982
#if PTHREADS
996-
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, orientationChangeEvent, userData);
983+
if (targetThread) __emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, orientationChangeEvent, userData);
997984
else
998985
#endif
999986
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, orientationChangeEvent, userData)) e.preventDefault();
@@ -1112,7 +1099,7 @@ var LibraryHTML5 = {
11121099
fillFullscreenChangeEventData(fullscreenChangeEvent);
11131100

11141101
#if PTHREADS
1115-
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, fullscreenChangeEvent, userData);
1102+
if (targetThread) __emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, fullscreenChangeEvent, userData);
11161103
else
11171104
#endif
11181105
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, fullscreenChangeEvent, userData)) e.preventDefault();
@@ -1195,7 +1182,7 @@ var LibraryHTML5 = {
11951182

11961183
if (strategy.canvasResizedCallback) {
11971184
#if PTHREADS
1198-
if (strategy.canvasResizedCallbackTargetThread) JSEvents.queueEventHandlerOnThread_iiii(strategy.canvasResizedCallbackTargetThread, strategy.canvasResizedCallback, {{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, strategy.canvasResizedCallbackUserData);
1185+
if (strategy.canvasResizedCallbackTargetThread) __emscripten_run_callback_on_thread(strategy.canvasResizedCallbackTargetThread, strategy.canvasResizedCallback, {{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, strategy.canvasResizedCallbackUserData);
11991186
else
12001187
#endif
12011188
{{{ makeDynCall('iipp', 'strategy.canvasResizedCallback') }}}({{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, strategy.canvasResizedCallbackUserData);
@@ -1347,7 +1334,7 @@ var LibraryHTML5 = {
13471334

13481335
if (currentFullscreenStrategy.canvasResizedCallback) {
13491336
#if PTHREADS
1350-
if (currentFullscreenStrategy.canvasResizedCallbackTargetThread) JSEvents.queueEventHandlerOnThread_iiii(currentFullscreenStrategy.canvasResizedCallbackTargetThread, currentFullscreenStrategy.canvasResizedCallback, {{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, currentFullscreenStrategy.canvasResizedCallbackUserData);
1337+
if (currentFullscreenStrategy.canvasResizedCallbackTargetThread) __emscripten_run_callback_on_thread(currentFullscreenStrategy.canvasResizedCallbackTargetThread, currentFullscreenStrategy.canvasResizedCallback, {{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, currentFullscreenStrategy.canvasResizedCallbackUserData);
13511338
else
13521339
#endif
13531340
{{{ makeDynCall('iipp', 'currentFullscreenStrategy.canvasResizedCallback') }}}({{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, currentFullscreenStrategy.canvasResizedCallbackUserData);
@@ -1475,7 +1462,7 @@ var LibraryHTML5 = {
14751462

14761463
if (!inCenteredWithoutScalingFullscreenMode && currentFullscreenStrategy.canvasResizedCallback) {
14771464
#if PTHREADS
1478-
if (currentFullscreenStrategy.canvasResizedCallbackTargetThread) JSEvents.queueEventHandlerOnThread_iiii(currentFullscreenStrategy.canvasResizedCallbackTargetThread, currentFullscreenStrategy.canvasResizedCallback, {{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, currentFullscreenStrategy.canvasResizedCallbackUserData);
1465+
if (currentFullscreenStrategy.canvasResizedCallbackTargetThread) __emscripten_run_callback_on_thread(currentFullscreenStrategy.canvasResizedCallbackTargetThread, currentFullscreenStrategy.canvasResizedCallback, {{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, currentFullscreenStrategy.canvasResizedCallbackUserData);
14791466
else
14801467
#endif
14811468
{{{ makeDynCall('iipp', 'currentFullscreenStrategy.canvasResizedCallback') }}}({{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, currentFullscreenStrategy.canvasResizedCallbackUserData);
@@ -1595,7 +1582,7 @@ var LibraryHTML5 = {
15951582
removeEventListener('resize', softFullscreenResizeWebGLRenderTarget);
15961583
if (strategy.canvasResizedCallback) {
15971584
#if PTHREADS
1598-
if (strategy.canvasResizedCallbackTargetThread) JSEvents.queueEventHandlerOnThread_iiii(strategy.canvasResizedCallbackTargetThread, strategy.canvasResizedCallback, {{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, strategy.canvasResizedCallbackUserData);
1585+
if (strategy.canvasResizedCallbackTargetThread) __emscripten_run_callback_on_thread(strategy.canvasResizedCallbackTargetThread, strategy.canvasResizedCallback, {{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, strategy.canvasResizedCallbackUserData);
15991586
else
16001587
#endif
16011588
{{{ makeDynCall('iipp', 'strategy.canvasResizedCallback') }}}({{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, strategy.canvasResizedCallbackUserData);
@@ -1609,7 +1596,7 @@ var LibraryHTML5 = {
16091596
// Inform the caller that the canvas size has changed.
16101597
if (strategy.canvasResizedCallback) {
16111598
#if PTHREADS
1612-
if (strategy.canvasResizedCallbackTargetThread) JSEvents.queueEventHandlerOnThread_iiii(strategy.canvasResizedCallbackTargetThread, strategy.canvasResizedCallback, {{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, strategy.canvasResizedCallbackUserData);
1599+
if (strategy.canvasResizedCallbackTargetThread) __emscripten_run_callback_on_thread(strategy.canvasResizedCallbackTargetThread, strategy.canvasResizedCallback, {{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, strategy.canvasResizedCallbackUserData);
16131600
else
16141601
#endif
16151602
{{{ makeDynCall('iipp', 'strategy.canvasResizedCallback') }}}({{{ cDefs.EMSCRIPTEN_EVENT_CANVASRESIZED }}}, 0, strategy.canvasResizedCallbackUserData);
@@ -1689,7 +1676,7 @@ var LibraryHTML5 = {
16891676
fillPointerlockChangeEventData(pointerlockChangeEvent);
16901677

16911678
#if PTHREADS
1692-
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, pointerlockChangeEvent, userData);
1679+
if (targetThread) __emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, pointerlockChangeEvent, userData);
16931680
else
16941681
#endif
16951682
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, pointerlockChangeEvent, userData)) e.preventDefault();
@@ -1734,7 +1721,7 @@ var LibraryHTML5 = {
17341721

17351722
var pointerlockErrorEventHandlerFunc = (e = event) => {
17361723
#if PTHREADS
1737-
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, 0, userData);
1724+
if (targetThread) __emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, 0, userData);
17381725
else
17391726
#endif
17401727
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, 0, userData)) e.preventDefault();
@@ -1934,7 +1921,7 @@ var LibraryHTML5 = {
19341921
fillVisibilityChangeEventData(visibilityChangeEvent);
19351922

19361923
#if PTHREADS
1937-
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, visibilityChangeEvent, userData);
1924+
if (targetThread) __emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, visibilityChangeEvent, userData);
19381925
else
19391926
#endif
19401927
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, visibilityChangeEvent, userData)) e.preventDefault();
@@ -2051,7 +2038,7 @@ var LibraryHTML5 = {
20512038
{{{ makeSetValue('touchEvent', C_STRUCTS.EmscriptenTouchEvent.numTouches, 'numTouches', 'i32') }}};
20522039

20532040
#if PTHREADS
2054-
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, touchEvent, userData);
2041+
if (targetThread) __emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, touchEvent, userData);
20552042
else
20562043
#endif
20572044
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, touchEvent, userData)) e.preventDefault();
@@ -2138,7 +2125,7 @@ var LibraryHTML5 = {
21382125
fillGamepadEventData(gamepadEvent, e["gamepad"]);
21392126

21402127
#if PTHREADS
2141-
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, gamepadEvent, userData);
2128+
if (targetThread) __emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, gamepadEvent, userData);
21422129
else
21432130
#endif
21442131
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, gamepadEvent, userData)) e.preventDefault();
@@ -2270,7 +2257,7 @@ var LibraryHTML5 = {
22702257
fillBatteryEventData(batteryEvent, battery());
22712258

22722259
#if PTHREADS
2273-
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, batteryEvent, userData);
2260+
if (targetThread) __emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, batteryEvent, userData);
22742261
else
22752262
#endif
22762263
if ({{{ makeDynCall('iipp', 'callbackfunc') }}}(eventTypeId, batteryEvent, userData)) e.preventDefault();

src/library_html5_webgl.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ var LibraryHtml5WebGL = {
403403

404404
var webGlEventHandlerFunc = (e = event) => {
405405
#if PTHREADS
406-
if (targetThread) JSEvents.queueEventHandlerOnThread_iiii(targetThread, callbackfunc, eventTypeId, 0, userData);
406+
if (targetThread) __emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, 0, userData);
407407
else
408408
#endif
409409
if ({{{ makeDynCall('iiii', 'callbackfunc') }}}(eventTypeId, 0, userData)) e.preventDefault();

src/struct_info.json

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -950,14 +950,6 @@
950950
{
951951
"file": "emscripten/threading.h",
952952
"defines": [
953-
"EM_FUNC_SIG_V",
954-
"EM_FUNC_SIG_VI",
955-
"EM_FUNC_SIG_VII",
956-
"EM_FUNC_SIG_VIII",
957-
"EM_FUNC_SIG_I",
958-
"EM_FUNC_SIG_II",
959-
"EM_FUNC_SIG_III",
960-
"EM_FUNC_SIG_IIII",
961953
"EM_FUNC_SIG_PARAM_I",
962954
"EM_FUNC_SIG_PARAM_I64",
963955
"EM_FUNC_SIG_PARAM_F",

system/lib/html5/callback.c

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*
2+
* Copyright 2023 The Emscripten Authors. All rights reserved.
3+
* Emscripten is available under two separate licenses, the MIT license and the
4+
* University of Illinois/NCSA Open Source License. Both these licenses can be
5+
* found in the LICENSE file.
6+
*/
7+
#include <assert.h>
8+
#include <emscripten/html5.h>
9+
10+
#include "emscripten_internal.h"
11+
12+
typedef EM_BOOL (*event_callback)(int event_type, void *event_data __attribute__((nonnull)), void *user_data);
13+
14+
typedef struct callback_args_t {
15+
event_callback callback;
16+
int event_type;
17+
void *event_data;
18+
void *user_data;
19+
} callback_args_t;
20+
21+
static void do_callback(void* arg) {
22+
callback_args_t* args = (callback_args_t*)arg;
23+
args->callback(args->event_type, args->event_data, args->user_data);
24+
}
25+
26+
void _emscripten_run_callback_on_thread(pthread_t t,
27+
event_callback f,
28+
int event_type,
29+
void* event_data,
30+
void* user_data) {
31+
em_proxying_queue* q = emscripten_proxy_get_system_queue();
32+
callback_args_t arg = {
33+
.callback = f,
34+
.event_type = event_type,
35+
.event_data = event_data,
36+
.user_data = user_data,
37+
};
38+
39+
if (!emscripten_proxy_sync(q, t, do_callback, &arg)) {
40+
assert(false && "emscripten_proxy_sync failed");
41+
}
42+
}

0 commit comments

Comments
 (0)