@@ -36,7 +36,7 @@ use std::{
36
36
37
37
use constellation:: FutureExt1 ;
38
38
use constellation_internal:: {
39
- forbid_alloc, map_bincode_err, msg:: { bincode_deserialize_from, bincode_serialize_into, BridgeRequest , FabricRequest } , BufferedStream , DeployInputEvent , DeployOutputEvent , ExitStatus , Fd , Pid , ProcessInputEvent , ProcessOutputEvent , Resources
39
+ abort_on_unwind , abort_on_unwind_1 , forbid_alloc, map_bincode_err, msg:: { bincode_deserialize_from, bincode_serialize_into, BridgeRequest , FabricRequest } , BufferedStream , DeployInputEvent , DeployOutputEvent , ExitStatus , Fd , Pid , ProcessInputEvent , ProcessOutputEvent , Resources
40
40
} ;
41
41
42
42
const SCHEDULER_FD : Fd = 4 ;
@@ -87,7 +87,9 @@ fn monitor_process(
87
87
let sender_ = sender_. clone ( ) ;
88
88
let _ = thread:: Builder :: new ( )
89
89
. name ( String :: from ( "d" ) )
90
- . spawn ( move || monitor_process ( new_pid, sender_, receiver1) )
90
+ . spawn ( abort_on_unwind ( move || {
91
+ monitor_process ( new_pid, sender_, receiver1)
92
+ } ) )
91
93
. unwrap ( ) ;
92
94
}
93
95
ProcessOutputEvent :: Output ( fd, output) => {
@@ -207,10 +209,10 @@ fn recce(
207
209
nix:: unistd:: close ( writer) . unwrap ( ) ;
208
210
// let _ = thread::Builder::new()
209
211
// .name(String::from(""))
210
- // .spawn(move || {
212
+ // .spawn(abort_on_unwind( move || {
211
213
// thread::sleep(RECCE_TIMEOUT);
212
214
// let _ = nix::sys::signal::kill(child, nix::sys::signal::Signal::SIGKILL);
213
- // })
215
+ // }))
214
216
// .unwrap();
215
217
// TODO: do this without waitpid/kill race
216
218
loop {
@@ -307,12 +309,14 @@ fn manage_connection(
307
309
let ( sender1, receiver1) = futures:: channel:: mpsc:: channel ( 0 ) ;
308
310
let _ = thread:: Builder :: new ( )
309
311
. name ( String :: from ( "c" ) )
310
- . spawn ( move || monitor_process ( pid, sender, receiver1) )
312
+ . spawn ( abort_on_unwind ( move || {
313
+ monitor_process ( pid, sender, receiver1)
314
+ } ) )
311
315
. unwrap ( ) ;
312
316
let hashmap = & Mutex :: new ( HashMap :: new ( ) ) ;
313
317
let _ = hashmap. lock ( ) . unwrap ( ) . insert ( pid, sender1) ;
314
318
crossbeam:: scope ( |scope| {
315
- let _ = scope. spawn ( move |_scope| {
319
+ let _ = scope. spawn ( abort_on_unwind_1 ( move |_scope| {
316
320
loop {
317
321
let event: Result < DeployInputEvent , _ > =
318
322
bincode:: deserialize_from ( & mut stream_read) . map_err ( map_bincode_err) ;
@@ -340,7 +344,7 @@ fn manage_connection(
340
344
for ( _, process) in x. iter_mut ( ) {
341
345
let _unchecked_error = process. send ( InputEventInt :: Kill ) . block ( ) ;
342
346
}
343
- } ) ;
347
+ } ) ) ;
344
348
for event in receiver. iter ( ) {
345
349
let event = match event {
346
350
OutputEventInt :: Spawn ( pid, new_pid, sender) => {
@@ -387,16 +391,18 @@ pub fn main() {
387
391
let ( sender, receiver) = mpsc:: sync_channel ( 0 ) ;
388
392
let _ = thread:: Builder :: new ( )
389
393
. name ( String :: from ( "a" ) )
390
- . spawn ( move || {
394
+ . spawn ( abort_on_unwind ( move || {
391
395
for stream in listener. incoming ( ) {
392
396
trace ! ( "BRIDGE: accepted" ) ;
393
397
let sender = sender. clone ( ) ;
394
398
let _ = thread:: Builder :: new ( )
395
399
. name ( String :: from ( "b" ) )
396
- . spawn ( || manage_connection ( stream. unwrap ( ) , sender) )
400
+ . spawn ( abort_on_unwind ( || {
401
+ manage_connection ( stream. unwrap ( ) , sender)
402
+ } ) )
397
403
. unwrap ( ) ;
398
404
}
399
- } )
405
+ } ) )
400
406
. unwrap ( ) ;
401
407
402
408
for ( request, sender) in receiver {
0 commit comments