diff options
author | Conrad Ludgate <conradludgate@gmail.com> | 2024-04-12 10:40:14 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-12 10:40:14 +0100 |
commit | c41998e98a073f4cce26134c0642c403d71b74a2 (patch) | |
tree | 735e7532eea69588d99bc6cb57c7c273f05fc5de | |
parent | d434d4e8b776e4a851b614616d3a5aa2e9792108 (diff) |
fix: use spawn_blocking for file access during async context (#1936)
-rw-r--r-- | atuin-client/src/settings.rs | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/atuin-client/src/settings.rs b/atuin-client/src/settings.rs index 97a0b4b7..541cb4d9 100644 --- a/atuin-client/src/settings.rs +++ b/atuin-client/src/settings.rs @@ -527,7 +527,13 @@ impl Settings { if !self.needs_update_check()? { // Worst case, we don't want Atuin to fail to start because something funky is going on with // version checking. - let version = match Settings::read_from_data_dir(LATEST_VERSION_FILENAME) { + let version = tokio::task::spawn_blocking(|| { + Settings::read_from_data_dir(LATEST_VERSION_FILENAME) + }) + .await + .expect("file task panicked"); + + let version = match version { Some(v) => Version::parse(&v).unwrap_or(current), None => current, }; @@ -541,8 +547,14 @@ impl Settings { #[cfg(not(feature = "sync"))] let latest = current; - Settings::save_version_check_time()?; - Settings::save_to_data_dir(LATEST_VERSION_FILENAME, latest.to_string().as_str())?; + let latest_encoded = latest.to_string(); + tokio::task::spawn_blocking(move || { + Settings::save_version_check_time()?; + Settings::save_to_data_dir(LATEST_VERSION_FILENAME, &latest_encoded)?; + Ok::<(), eyre::Report>(()) + }) + .await + .expect("file task panicked")?; Ok(latest) } |