Details
Description
In Java frameworks, it is possible for the JVM to begin exiting the program - via System.exit(), for example - while teardown of native objects such as the SchedulerDriver and associated Executors is still in progress. SchedulerDriver::stop() will return after it has sent messages to other actors to begin their teardown, meanwhile the JVM is free to terminate the program and thus begin executing native object destructors while those objects are still in use, potentially leading to a segfault.
This has manifested itself in flaky tests from the ExamplesTest suite (see MESOS-830 and MESOS-1013), as mutexes from glog are destroyed while the framework is still shutting down and attempting to log.
Ideally, a mechanism would exist to block the Java code until a confirmation that framework teardown is complete has been received.