     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31

    //! Package up unwind recovery. Note that if you are in some sensitive
    //! place, you can use the `AbortIfPanic` helper to protect against
    //! accidental panics in the rayon code itself.

    use std::any::Any;
    use std::panic::{self, AssertUnwindSafe};
    use std::thread;

    /// Executes `f` and captures any panic, translating that panic into a
    /// `Err` result. The assumption is that any panic will be propagated
    /// later with `resume_unwinding`, and hence `f` can be treated as
    /// exception safe.
    pub(super) fn halt_unwinding<F, R>(func: F) -> thread::Result<R>
    where
        F: FnOnce() -> R,
    {
        panic::catch_unwind(AssertUnwindSafe(func))
    }

    pub(super) fn resume_unwinding(payload: Box<Any + Send>) -> ! {
        panic::resume_unwind(payload)
    }

    pub(super) struct AbortIfPanic;

    impl Drop for AbortIfPanic {
        fn drop(&mut self) {
            eprintln!("Rayon: detected unexpected panic; aborting");
            ::std::process::abort();
        }
    }

# Help

## Keyboard Shortcuts

`?`
  Show this help dialog
`S`
  Focus the search field
`↑`
  Move up in search results
`↓`
  Move down in search results
`↹`
  Switch tab
`⏎`
  Go to active search result
`+`
  Expand all sections
`-`
  Collapse all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g., `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g., `vec -> usize` or `* -> vec`)

Search multiple things at once by splitting your query with comma (e.g., `str,u8` or `String,struct:Vec,test`)