Skip to content

Commit

Permalink
Shut down servo when the ML app quits
Browse files Browse the repository at this point in the history
  • Loading branch information
Alan Jeffrey committed Nov 2, 2018
1 parent 95bfaa0 commit 57085ee
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 5 deletions.
23 changes: 20 additions & 3 deletions ports/libmlservo/src/lib.rs
Expand Up @@ -43,6 +43,9 @@ use std::os::raw::c_char;
use std::os::raw::c_void;
use std::path::PathBuf;
use std::rc::Rc;
use std::thread;
use std::time::Duration;
use std::time::Instant;

#[repr(u32)]
pub enum MLLogLevel {
Expand Down Expand Up @@ -221,11 +224,25 @@ pub unsafe extern "C" fn navigate_servo(servo: *mut ServoInstance, text: *const
}
}

// Some magic numbers for shutdown
const SHUTDOWN_DURATION: Duration = Duration::from_secs(10);
const SHUTDOWN_POLL_INTERVAL: Duration = Duration::from_millis(100);

#[no_mangle]
pub unsafe extern "C" fn discard_servo(servo: *mut ServoInstance) {
// Servo drop goes here!
if !servo.is_null() {
Box::from_raw(servo);
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]);
for (_, msg) in servo.servo.get_events() {
if let EmbedderMsg::Shutdown = msg {
break 'outer;
}
}
thread::sleep(SHUTDOWN_POLL_INTERVAL);
}
servo.servo.deinit();
}
}

Expand Down
4 changes: 2 additions & 2 deletions support/magicleap/Servo2D/code/src/Servo2D.cpp
Expand Up @@ -58,8 +58,6 @@ Servo2D::Servo2D() {
// Destroy a Servo 2D instance
Servo2D::~Servo2D() {
ML_LOG(Debug, "Servo2D Destructor.");
discard_servo(servo_);
servo_ = nullptr;
}

// The prism dimensions
Expand Down Expand Up @@ -167,6 +165,8 @@ int Servo2D::init() {

int Servo2D::deInit() {
ML_LOG(Debug, "Servo2D Deinitializing.");
discard_servo(servo_);
servo_ = nullptr;
return 0;
}

Expand Down

0 comments on commit 57085ee

Please sign in to comment.