Fix some cases of concurrent panics and backtraces #241
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This commit adds an awful hack to this crate to attempt to mitigate the
issue of concurrently generating a backtrace in the standard library via
RUST_BACKTRACE=1
and also generating a backtrace with this crate. OnWindows the system library that we used for doing this is required to be
single-threaded but we don't actually provide such a guarantee when
using this crate because we can't easily synchronize with the standard
library.
The hack applied in this crate is to use a panic hook to inject
ourselves into the panic process and ensure that panics are synchronized
with generating a backtrace. The commit itself has a lot more comments
about how this is not a complete nor a bullet-proof solution. It's just
sort of the best approximation I think we can do with stable Rust.
Long-term we're going to want to have some sort of official stable API
in libstd to do this coordination.
cc #230