@@ -36,12 +36,23 @@ impl Command for Coprocess {
3636
3737 let mut prevp = Pipe :: new ( "|" . to_string ( ) ) ;
3838 prevp. set ( -1 , pgid, core) ;
39+ prevp. send = core. fds . dupfd_cloexec ( prevp. send , 60 ) . unwrap ( ) ;
40+ prevp. recv = core. fds . dupfd_cloexec ( prevp. recv , 60 ) . unwrap ( ) ;
41+
3942 let mut lastp = Pipe :: new ( "|" . to_string ( ) ) ;
4043 lastp. set ( prevp. recv , pgid, core) ;
44+ lastp. send = core. fds . dupfd_cloexec ( lastp. send , 60 ) . unwrap ( ) ;
45+ lastp. recv = core. fds . dupfd_cloexec ( lastp. recv , 60 ) . unwrap ( ) ;
46+
4147 let pid = com. exec ( core, & mut lastp) ?. unwrap ( ) ;
48+ let fds = Some ( vec ! [ lastp. recv. to_string( ) , prevp. send. to_string( ) ] ) ;
4249
43- let _ = core. db . init_array ( & self . name , Some ( vec ! [ lastp. recv. to_string( ) , prevp. send. to_string( ) ] ) , Some ( 0 ) , true ) ;
50+ let _ = core. db . init_array ( & self . name , fds, Some ( 0 ) , true ) ;
51+ let pid_name = format ! ( "{}_PID" , & self . name) ;
52+ let _ = core. db . set_param ( & pid_name, & pid. to_string ( ) , Some ( 0 ) ) ;
4453
54+ core. fds . close ( lastp. send ) ;
55+ core. fds . close ( prevp. recv ) ;
4556
4657 let _ = core. db . set_param ( "!" , & pid. to_string ( ) , None ) ;
4758 let new_job_id = core. generate_new_job_id ( ) ;
0 commit comments