mirror of
https://github.com/rust-vmm/vhost-device.git
synced 2025-12-29 00:41:19 +00:00
tree-wide: continue unwinds on join failures
The error from joining a thread is a bit confusing. It is only printed
if the other thread panicked. This means, effectively, we only get here
if something called .unwrap(), .expect() or panicked in a different way.
In these cases an (ugly) error was already printend. Printing a pretty
message about the join failure does not really help a lot...
So let's just continue the unwind as suggested by the docs on the join
`Result` [1].
Before:
thread '<unnamed>' panicked at 'Test panic', crates/gpio/src/backend.rs:146:13
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Any { .. }', crates/gpio/src/backend.rs:176:23
After:
thread '<unnamed>' panicked at 'Test panic', crates/gpio/src/backend.rs:146:13
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
[1]: https://doc.rust-lang.org/std/thread/type.Result.html
Signed-off-by: Erik Schilling <erik.schilling@linaro.org>
This commit is contained in:
parent
25c6ac3362
commit
2143bcb44c
@ -36,8 +36,6 @@ pub(crate) enum Error {
|
||||
DeviceDuplicate(u32),
|
||||
#[error("Failed while parsing to integer: {0:?}")]
|
||||
ParseFailure(ParseIntError),
|
||||
#[error("Failed to join threads")]
|
||||
FailedJoiningThreads,
|
||||
#[error("Could not open gpio device: {0}")]
|
||||
CouldNotOpenDevice(crate::gpio::Error),
|
||||
#[error("Could not create gpio controller: {0}")]
|
||||
@ -227,7 +225,7 @@ fn start_backend(args: GpioArgs) -> Result<()> {
|
||||
}
|
||||
|
||||
for handle in handles {
|
||||
handle.join().map_err(|_| Error::FailedJoiningThreads)??;
|
||||
handle.join().map_err(std::panic::resume_unwind).unwrap()?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
||||
@ -39,8 +39,6 @@ pub(crate) enum Error {
|
||||
I2cFailure(i2c::Error),
|
||||
#[error("Failed while parsing to integer: {0:?}")]
|
||||
ParseFailure(ParseIntError),
|
||||
#[error("Failed to join threads")]
|
||||
FailedJoiningThreads,
|
||||
#[error("Could not create backend: {0}")]
|
||||
CouldNotCreateBackend(vhu_i2c::Error),
|
||||
#[error("Could not create daemon: {0}")]
|
||||
@ -215,7 +213,7 @@ fn start_backend<D: 'static + I2cDevice + Send + Sync>(args: I2cArgs) -> Result<
|
||||
}
|
||||
|
||||
for handle in handles {
|
||||
handle.join().map_err(|_| Error::FailedJoiningThreads)??;
|
||||
handle.join().map_err(std::panic::resume_unwind).unwrap()?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
||||
@ -33,8 +33,6 @@ pub(crate) enum Error {
|
||||
InvalidPeriodInput(u128),
|
||||
#[error("Wrong socket count: {0}")]
|
||||
InvalidSocketCount(u32),
|
||||
#[error("Threads can't be joined")]
|
||||
FailedJoiningThreads,
|
||||
#[error("Could not create backend: {0}")]
|
||||
CouldNotCreateBackend(std::io::Error),
|
||||
#[error("Could not create daemon: {0}")]
|
||||
@ -139,7 +137,7 @@ pub(crate) fn start_backend(config: VuRngConfig) -> Result<()> {
|
||||
}
|
||||
|
||||
for handle in handles {
|
||||
handle.join().map_err(|_| Error::FailedJoiningThreads)??;
|
||||
handle.join().map_err(std::panic::resume_unwind).unwrap()?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
||||
@ -281,7 +281,12 @@ pub(crate) fn start_backend_servers(configs: &[VsockConfig]) -> Result<(), Backe
|
||||
|
||||
while !handles.is_empty() {
|
||||
let thread_id = receiver.recv().unwrap();
|
||||
handles.remove(&thread_id).unwrap().join().unwrap()?;
|
||||
handles
|
||||
.remove(&thread_id)
|
||||
.unwrap()
|
||||
.join()
|
||||
.map_err(std::panic::resume_unwind)
|
||||
.unwrap()?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
||||
Loading…
Reference in New Issue
Block a user