@@ -309,8 +309,11 @@ export interface UserspaceOtherProcessContext {
309309export interface UserspaceProcessContext extends UserspaceOtherProcessContext {
310310 detach ( silently ?: boolean ) : void ;
311311 kill ( exit_code ?: number ) : void ;
312+ add_exit_listener ( listener : ( exit_code : number ) => Promise < void > | void ) : void ;
312313 create_timeout ( callback : ( ) => void , delay : number ) : number ;
313314 cancel_timeout ( id : number ) : void ;
315+ wait_for_timeout ( id : number ) : Promise < boolean > ;
316+ has_timeout ( id : number ) : boolean ;
314317 create_interval ( callback : ( ) => void , interval : number ) : number ;
315318 clear_interval ( id : number ) : void ;
316319 create_window ( ) : AbstractWindow | null ;
@@ -434,7 +437,11 @@ export class ProcessContext {
434437 this . #manager. mark_terminated ( this . #pid) ;
435438
436439 for ( const listener of this . #exit_listeners) {
437- listener ( exit_code ) ;
440+ try {
441+ listener ( exit_code ) ;
442+ } catch ( err ) {
443+ console . error ( "Process exit listener error:" , err ) ;
444+ }
438445 }
439446 }
440447
@@ -615,11 +622,13 @@ export class ProcessContext {
615622 is_foreground : { get : ( ) => self . is_foreground , enumerable : true } ,
616623 attachment : { get : ( ) => self . attachment , enumerable : true } ,
617624 source_command : { get : ( ) => self . source_command , enumerable : true } ,
618-
619625 detach : { value : ( silently = false ) => { self . detach ( silently ) ; } , enumerable : true } ,
620626 kill : { value : ( exit_code = 0 ) => { self . kill ( exit_code ) ; } , enumerable : true } ,
627+ add_exit_listener : { value : ( listener : ( exit_code : number ) => Promise < void > | void ) => { self . add_exit_listener ( listener ) ; } , enumerable : true } ,
621628 create_timeout : { value : ( callback : ( ) => void , delay : number ) => self . create_timeout ( callback , delay ) , enumerable : true } ,
622629 cancel_timeout : { value : ( id : number ) => { self . cancel_timeout ( id ) ; } , enumerable : true } ,
630+ wait_for_timeout : { value : ( id : number ) => self . wait_for_timeout ( id ) , enumerable : true } ,
631+ has_timeout : { value : ( id : number ) => self . has_timeout ( id ) , enumerable : true } ,
623632 create_interval : { value : ( callback : ( ) => void , interval : number ) => self . create_interval ( callback , interval ) , enumerable : true } ,
624633 clear_interval : { value : ( id : number ) => { self . clear_interval ( id ) ; } , enumerable : true } ,
625634 create_window : { value : ( ) => self . create_window ( ) , enumerable : true } ,
0 commit comments