summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorConrad Ludgate <conradludgate@gmail.com>2024-04-12 10:40:14 +0100
committerGitHub <noreply@github.com>2024-04-12 10:40:14 +0100
commitc41998e98a073f4cce26134c0642c403d71b74a2 (patch)
tree735e7532eea69588d99bc6cb57c7c273f05fc5de
parentd434d4e8b776e4a851b614616d3a5aa2e9792108 (diff)
fix: use spawn_blocking for file access during async context (#1936)
-rw-r--r--atuin-client/src/settings.rs18
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)
}