@@ -520,14 +520,6 @@ class HooksProxy {
520520 }
521521 }
522522
523- #beforeExitHandler = ( ) => {
524- debug ( 'beforeExit main thread' , this . #lock, this . #numberOfPendingAsyncResponses) ;
525- if ( this . #numberOfPendingAsyncResponses !== 0 ) {
526- // The worker still has some work to do, let's wait for it before terminating the process.
527- this . #worker. ref ( ) ;
528- }
529- } ;
530-
531523 async makeAsyncRequest ( method , ...args ) {
532524 this . #waitForWorker( ) ;
533525
@@ -543,11 +535,9 @@ class HooksProxy {
543535 // come AFTER the last task in the event loop has run its course and there would be nothing
544536 // left keeping the thread alive (and once the main thread dies, the whole process stops).
545537 // However we want to keep the process alive until the worker thread responds (or until the
546- // event loop of the worker thread is also empty). So we add the beforeExit handler whose
547- // mission is to lock the main thread until we hear back from the worker thread. The `if`
548- // condition is there so we only add the event handler once (if there are already pending
549- // async responses, the previous calls have added the event listener).
550- process . on ( 'beforeExit' , this . #beforeExitHandler) ;
538+ // event loop of the worker thread is also empty), so we ref the worker until we get all the
539+ // responses back.
540+ this . #worker. ref ( ) ;
551541 }
552542
553543 let response ;
@@ -556,16 +546,13 @@ class HooksProxy {
556546 await AtomicsWaitAsync ( this . #lock, WORKER_TO_MAIN_THREAD_NOTIFICATION , this . #workerNotificationLastId) . value ;
557547 this . #workerNotificationLastId = AtomicsLoad ( this . #lock, WORKER_TO_MAIN_THREAD_NOTIFICATION ) ;
558548
559- // In case the beforeExit handler was called during the await, we revert its actions.
560- this . #worker. unref ( ) ;
561-
562549 response = receiveMessageOnPort ( asyncCommChannel . port1 ) ;
563550 } while ( response == null ) ;
564551 debug ( 'got async response from worker' , { method, args } , this . #lock) ;
565552
566553 if ( -- this . #numberOfPendingAsyncResponses === 0 ) {
567554 // We got all the responses from the worker, its job is done (until next time).
568- process . off ( 'beforeExit' , this . #beforeExitHandler ) ;
555+ this . #worker . unref ( ) ;
569556 }
570557
571558 const body = this . #unwrapMessage( response ) ;
0 commit comments