@@ -241,6 +241,9 @@ var LibraryPThread = {
241
241
worker . onmessage = ( e ) => {
242
242
var d = e [ 'data' ] ;
243
243
var cmd = d . cmd ;
244
+ #if PTHREADS_DEBUG
245
+ dbg ( `main thread: received message '${ cmd } ' from worker. ${ d } ` ) ;
246
+ #endif
244
247
245
248
// If this message is intended to a recipient that is not the main
246
249
// thread, forward it to the target thread.
@@ -283,6 +286,13 @@ var LibraryPThread = {
283
286
// Worker wants to postMessage() to itself to implement setImmediate()
284
287
// emulation.
285
288
worker . postMessage ( d ) ;
289
+ #if ENVIRONMENT_MAY_BE_NODE
290
+ } else if ( cmd === 'uncaughtException' ) {
291
+ // Message handler for Node.js specific out-of-order behavior:
292
+ // https://github.com/nodejs/node/issues/59617
293
+ // A pthread sent an uncaught exception event. Re-raise it on the main thread.
294
+ worker . onerror ( d . error ) ;
295
+ #endif
286
296
} else if ( cmd === 'callHandler' ) {
287
297
Module [ d . handler ] ( ...d . args ) ;
288
298
} else if ( cmd ) {
@@ -308,6 +318,13 @@ var LibraryPThread = {
308
318
if ( ENVIRONMENT_IS_NODE ) {
309
319
worker . on ( 'message' , ( data ) => worker . onmessage ( { data : data } ) ) ;
310
320
worker . on ( 'error' , ( e ) => worker . onerror ( e ) ) ;
321
+
322
+ #if PTHREADS_DEBUG
323
+ worker . on ( 'exit' , ( code ) => {
324
+ if ( worker . pthread_ptr ) dbg ( `Worker hosting pthread ${ ptrToString ( worker . pthread_ptr ) } has terminated with code ${ code } .` ) ;
325
+ else dbg ( `Worker has terminated with code ${ code } .` ) ;
326
+ } ) ;
327
+ #endif
311
328
}
312
329
#endif
313
330
0 commit comments