-
-
Notifications
You must be signed in to change notification settings - Fork 2.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
rt: unhandled panic config for current thread rt #4770
Conversation
Allows the user to configure the runtime's behavior when a spawned task panics. Currently, the panic is propagated to the JoinHandle and the runtime resumes. This patch lets the user set the runtime to shutdown on unhandled panic. So far, this is only implemented for the current-thread runtime. Refs: #4516
Co-authored-by: Alice Ryhl <alice@ryhl.io>
Running loom again to check a typo fix 😆 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
overall, this looks good to me (and i previously approved it). i commented on a handful of minor things that may not be that important.
// This hook is only called from within the runtime, so | ||
// `CURRENT` should match with `&self`, i.e. there is no | ||
// opportunity for a nested scheduler to be called. | ||
CURRENT.with(|maybe_cx| match maybe_cx { | ||
Some(cx) if Arc::ptr_eq(self, &cx.spawner.shared) => { | ||
let mut core = cx.core.borrow_mut(); | ||
|
||
// If `None`, the runtime is shutting down, so there is no need to signal shutdown |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is an extremely silly and trivial nit, but it kinda bothers me that one comment is wrapped, and the other one isn't...
/// True if a task panicked without being handled and the runtime is | ||
/// configured to shutdown on unhandled panic. | ||
unhandled_panic: bool, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
previously i remember thinking that it would be nice to be able to actually store the unhandled panic and propagate it, rather than creating a new panic that loses the original panic's message, but you pointed out that that doesn't work, because the panic is also shared with the JoinHandle
and they could race for it.
it occurs to me, though, that now that we have task IDs, perhaps we should store the ID of the task that panicked, rather than just a bool indicating that a task panicked. that way, we could at least identify which task panicked when the runtime panics, which could help users debug the panic when combined with other logs/diagnostics. WDYT?
|
||
#[cfg(tokio_unstable)] | ||
/// How to respond to unhandled task panics. | ||
pub(crate) unhandled_panic: crate::runtime::UnhandledPanic, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit/TIOLI: perhaps this should be called on_unhandled_panic
or something, since there's also a field called unhandled_panic
that indicates whether there was an unhandled panic, and that seems confusable?
} | ||
} | ||
|
||
for _ in 0..core.spawner.shared.config.event_interval { | ||
// Make sure we didn't hit an unhandled_panic |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
// Make sure we didn't hit an unhandled_panic | |
// Make sure we didn't hit an unhandled panic |
/// ``` | ||
/// | ||
/// [`JoinHandle`]: struct@crate::task::JoinHandle | ||
ShutdownRuntime, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is maybe a silly nitpick but i don't know if i love the name ShutdownRuntime
for this --- the word "shutdown" kind of suggests to me that the runtime just...shuts down, rather than panicking. perhaps this should be called PanicRuntime
or something? idk. maybe this is worse...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you add the suggestion to #4516?
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [tokio](https://tokio.rs) ([source](https://github.com/tokio-rs/tokio)) | dependencies | minor | `1.19.2` -> `1.20.0` | | [tokio](https://tokio.rs) ([source](https://github.com/tokio-rs/tokio)) | dev-dependencies | minor | `1.19.2` -> `1.20.0` | --- ### Release Notes <details> <summary>tokio-rs/tokio</summary> ### [`v1.20.0`](https://github.com/tokio-rs/tokio/releases/tag/tokio-1.20.0) [Compare Source](tokio-rs/tokio@tokio-1.19.2...tokio-1.20.0) ##### 1.20.0 (July 12, 2022) ##### Added - tokio: add track_caller to public APIs ([#​4772], [#​4791], [#​4793], [#​4806], [#​4808]) - sync: Add `has_changed` method to `watch::Ref` ([#​4758]) ##### Changed - time: remove `src/time/driver/wheel/stack.rs` ([#​4766]) - rt: clean up arguments passed to basic scheduler ([#​4767]) - net: be more specific about winapi features ([#​4764]) - tokio: use const initialized thread locals where possible ([#​4677]) - task: various small improvements to LocalKey ([#​4795]) ##### Fixed ##### Documented - fs: warn about performance pitfall ([#​4762]) - chore: fix spelling ([#​4769]) - sync: document spurious failures in oneshot ([#​4777]) - sync: add warning for watch in non-Send futures ([#​4741]) - chore: fix typo ([#​4798]) ##### Unstable - joinset: rename `join_one` to `join_next` ([#​4755]) - rt: unhandled panic config for current thread rt ([#​4770]) [#​4677]: tokio-rs/tokio#4677 [#​4741]: tokio-rs/tokio#4741 [#​4755]: tokio-rs/tokio#4755 [#​4758]: tokio-rs/tokio#4758 [#​4762]: tokio-rs/tokio#4762 [#​4764]: tokio-rs/tokio#4764 [#​4766]: tokio-rs/tokio#4766 [#​4767]: tokio-rs/tokio#4767 [#​4769]: tokio-rs/tokio#4769 [#​4770]: tokio-rs/tokio#4770 [#​4772]: tokio-rs/tokio#4772 [#​4777]: tokio-rs/tokio#4777 [#​4791]: tokio-rs/tokio#4791 [#​4793]: tokio-rs/tokio#4793 [#​4795]: tokio-rs/tokio#4795 [#​4798]: tokio-rs/tokio#4798 [#​4806]: tokio-rs/tokio#4806 [#​4808]: tokio-rs/tokio#4808 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzMi4xMTEuMSIsInVwZGF0ZWRJblZlciI6IjMyLjExMS4xIn0=--> Co-authored-by: cabr2-bot <cabr2.help@gmail.com> Reviewed-on: https://codeberg.org/Calciumdibromid/CaBr2/pulls/1458 Reviewed-by: crapStone <crapstone@noreply.codeberg.org> Co-authored-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org> Co-committed-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org>
Are there any updates for stabilizing this feature? |
No. |
This is a rebased version of #4518.
Allows the user to configure the runtime's behavior when a spawned task
panics. Currently, the panic is propagated to the JoinHandle and the
runtime resumes. This patch lets the user set the runtime to shutdown on
unhandled panic.
So far, this is only implemented for the current-thread runtime and is flagged as unstable. The intent is
to build this incrementally and track outstanding questions and issues.
Refs: #4516