mirror of
https://github.com/edera-dev/sprout.git
synced 2025-12-19 20:20:17 +00:00
fix(menu): prevent masking of wait for event errors if closing the timer event fails
This commit is contained in:
17
src/menu.rs
17
src/menu.rs
@@ -2,7 +2,7 @@ use crate::entries::BootableEntry;
|
|||||||
use crate::integrations::bootloader_interface::BootloaderInterface;
|
use crate::integrations::bootloader_interface::BootloaderInterface;
|
||||||
use crate::platform::timer::PlatformTimer;
|
use crate::platform::timer::PlatformTimer;
|
||||||
use anyhow::{Context, Result, bail};
|
use anyhow::{Context, Result, bail};
|
||||||
use log::info;
|
use log::{info, warn};
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use uefi::ResultExt;
|
use uefi::ResultExt;
|
||||||
use uefi::boot::TimerTrigger;
|
use uefi::boot::TimerTrigger;
|
||||||
@@ -66,7 +66,20 @@ fn read(input: &mut Input, timeout: &Duration) -> Result<MenuOperation> {
|
|||||||
// Close the timer event that we acquired.
|
// Close the timer event that we acquired.
|
||||||
// We don't need to close the key event because it is owned globally.
|
// We don't need to close the key event because it is owned globally.
|
||||||
if let Some(timer_event) = events.into_iter().next() {
|
if let Some(timer_event) = events.into_iter().next() {
|
||||||
uefi::boot::close_event(timer_event).context("unable to close timer event")?;
|
// Store the result of the close event so we can determine if we can safely assert it.
|
||||||
|
let close_event_result =
|
||||||
|
uefi::boot::close_event(timer_event).context("unable to close timer event");
|
||||||
|
if event_result.is_err()
|
||||||
|
&& let Err(ref close_event_error) = close_event_result
|
||||||
|
{
|
||||||
|
// Log a warning if we failed to close the timer event.
|
||||||
|
// This is done to ensure we don't mask the wait_for_event error.
|
||||||
|
warn!("unable to close timer event: {}", close_event_error);
|
||||||
|
} else {
|
||||||
|
// If we reach here, we can safely assert that the close event succeeded without
|
||||||
|
// masking the wait_for_event error.
|
||||||
|
close_event_result?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Acquire the event that triggered.
|
// Acquire the event that triggered.
|
||||||
|
|||||||
Reference in New Issue
Block a user