diff options
-rw-r--r-- | ports/libmlservo/src/lib.rs | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/ports/libmlservo/src/lib.rs b/ports/libmlservo/src/lib.rs index 8f4118d959c..532f0ff0481 100644 --- a/ports/libmlservo/src/lib.rs +++ b/ports/libmlservo/src/lib.rs @@ -233,14 +233,19 @@ pub unsafe extern "C" fn discard_servo(servo: *mut ServoInstance) { if let Some(servo) = servo.as_mut() { let mut servo = Box::from_raw(servo); let finish = Instant::now() + SHUTDOWN_DURATION; - 'outer: while Instant::now() < finish { - servo.servo.handle_events(vec![WindowEvent::Quit]); + servo.servo.handle_events(vec![WindowEvent::Quit]); + 'outer: loop { for (_, msg) in servo.servo.get_events() { if let EmbedderMsg::Shutdown = msg { break 'outer; } } + if Instant::now() > finish { + warn!("Incomplete shutdown."); + break 'outer; + } thread::sleep(SHUTDOWN_POLL_INTERVAL); + servo.servo.handle_events(vec![]); } servo.servo.deinit(); } |