=============
panic_monitor
=============
panic_monitor helps you monitor your threads and deal with panics. You might
be tempted to use libstd's JoinHandles for this use-case; however, they have
two major limitations:
* JoinHandle::join() blocks the current thread. If you want to monitor
multiple threads from a single "watchdog" thread, you need something like
try_join(), and ideally you'd have an "epoll for JoinHandles" to avoid
busy-waiting. JoinHandle doesn't implement these, however.
* You can't clone a JoinHandle. If you want multiple threads to be notified
when a particular thread panics, you can't use its JoinHandle to achieve it.
panic_monitor solves both of these issues. PanicMonitor::wait() allows you to
specify a number of threads, and it returns as soon as one of them panics.
Threads are specified by their ThreadId (which is clonable), meaning that
mulitple threads can monitor the same thread. Each call to
PanicMonitor::wait() can specify a different set of watched threads.
When a watched thread panics, you get a Thread struct back (which contains the
thread's name and ID). In contrast with JoinHandle::join(), you *don't* get
the value which was passed to panic!() - this is not possible, given that this
value is not required to implement Clone.
LICENCE
Licensed under either of the following, at your option:
* Apache Licence 2.0 (see LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
* MIT licence (see LICENSE-MIT or http://opensource.org/licenses/MIT)
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall
be dual licensed as above, without any additional terms or conditions.