Use `__proxy` mechanism for kill/cancelThread. NFC This was noticed while working on #18376
diff --git a/src/library_pthread.js b/src/library_pthread.js index 83d9900..a51b837 100644 --- a/src/library_pthread.js +++ b/src/library_pthread.js
@@ -29,8 +29,8 @@ var LibraryPThread = { $PThread__postset: 'PThread.init();', $PThread__deps: ['_emscripten_thread_init', - '$killThread', - '$cancelThread', '$cleanupThread', '$zeroMemory', + '$zeroMemory', + '$cleanupThread', '$spawnThread', '_emscripten_thread_free_data', 'exit', @@ -267,10 +267,6 @@ spawnThread(d); } else if (cmd === 'cleanupThread') { cleanupThread(d['thread']); - } else if (cmd === 'killThread') { - killThread(d['thread']); - } else if (cmd === 'cancelThread') { - cancelThread(d['thread']); } else if (cmd === 'loaded') { worker.loaded = true; #if ENVIRONMENT_MAY_BE_NODE @@ -533,6 +529,9 @@ // entry point, calls pthread_exit, or acts upon a cancellation. // Detached threads are responsible for calling this themselves, // otherwise pthread_join is responsible for calling this. + // Note: we can't use the 'async' proxy mechanism here since this can be + // called from _emscripten_thread_exit after the current thread is been + // destroyed (i.e. we can't call back into native code at this point). if (!ENVIRONMENT_IS_PTHREAD) cleanupThread(thread); else postMessage({ 'cmd': 'cleanupThread', 'thread': thread }); }, @@ -866,14 +865,15 @@ #endif }, - __pthread_kill_js__deps: ['emscripten_main_browser_thread_id'], + __pthread_kill_js__deps: ['emscripten_main_browser_thread_id', + '$cancelThread', + '$killThread'], + __pthread_kill_js__proxy: 'async', __pthread_kill_js: function(thread, signal) { if (signal === {{{ cDefine('SIGCANCEL') }}}) { // Used by pthread_cancel in musl - if (!ENVIRONMENT_IS_PTHREAD) cancelThread(thread); - else postMessage({ 'cmd': 'cancelThread', 'thread': thread }); + cancelThread(thread); } else { - if (!ENVIRONMENT_IS_PTHREAD) killThread(thread); - else postMessage({ 'cmd': 'killThread', 'thread': thread }); + killThread(thread); } return 0; },
diff --git a/test/other/metadce/test_metadce_minimal_pthreads.jssize b/test/other/metadce/test_metadce_minimal_pthreads.jssize index 84641cd..8af5661 100644 --- a/test/other/metadce/test_metadce_minimal_pthreads.jssize +++ b/test/other/metadce/test_metadce_minimal_pthreads.jssize
@@ -1 +1 @@ -16064 +15881