Skip to content

Commit

Permalink
fix(sql) Allow tauri-plugin-sql to work when Tauri is running async (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
johncarmack1984 authored Nov 13, 2024
1 parent 51856e9 commit 90ef77c
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 2 deletions.
5 changes: 5 additions & 0 deletions .changes/sql-allow-blocking-without-nested-runtime.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"sql": "patch"
---

Allow blocking on async code without creating a nested runtime.
13 changes: 11 additions & 2 deletions plugins/sql/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,15 @@ impl MigrationSource<'static> for MigrationList {
}
}

/// Allows blocking on async code without creating a nested runtime.
fn run_async_command<F: std::future::Future>(cmd: F) -> F::Output {
if tokio::runtime::Handle::try_current().is_ok() {
tokio::task::block_in_place(|| tokio::runtime::Handle::current().block_on(cmd))
} else {
tauri::async_runtime::block_on(cmd)
}
}

/// Tauri SQL plugin builder.
#[derive(Default)]
pub struct Builder {
Expand Down Expand Up @@ -136,7 +145,7 @@ impl Builder {
.setup(|app, api| {
let config = api.config().clone().unwrap_or_default();

tauri::async_runtime::block_on(async move {
run_async_command(async move {
let instances = DbInstances::default();
let mut lock = instances.0.write().await;

Expand Down Expand Up @@ -164,7 +173,7 @@ impl Builder {
})
.on_event(|app, event| {
if let RunEvent::Exit = event {
tauri::async_runtime::block_on(async move {
run_async_command(async move {
let instances = &*app.state::<DbInstances>();
let instances = instances.0.read().await;
for value in instances.values() {
Expand Down

0 comments on commit 90ef77c

Please sign in to comment.