helps you monitor your threads and deal with panics
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
tests
.gitignore
Cargo.toml
LICENSE-APACHE
LICENSE-MIT
README

README

                                 =============
                                 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.