diff --git a/sqlx-core/src/sqlite/statement/worker.rs b/sqlx-core/src/sqlite/statement/worker.rs index 3189d7a9..8b1d2299 100644 --- a/sqlx-core/src/sqlite/statement/worker.rs +++ b/sqlx-core/src/sqlite/statement/worker.rs @@ -1,9 +1,9 @@ use crate::error::Error; use crate::sqlite::statement::StatementHandle; -use crossbeam_channel::{bounded, unbounded, Sender}; +use crossbeam_channel::{unbounded, Sender}; use either::Either; +use futures_channel::oneshot; use libsqlite3_sys::{sqlite3_step, SQLITE_DONE, SQLITE_ROW}; -use sqlx_rt::yield_now; use std::thread; // Each SQLite connection has a dedicated thread. @@ -19,7 +19,7 @@ pub(crate) struct StatementWorker { enum StatementWorkerCommand { Step { statement: StatementHandle, - tx: Sender, Error>>, + tx: oneshot::Sender, Error>>, }, } @@ -52,16 +52,12 @@ impl StatementWorker { &mut self, statement: StatementHandle, ) -> Result, Error> { - let (tx, rx) = bounded(1); + let (tx, rx) = oneshot::channel(); self.tx .send(StatementWorkerCommand::Step { statement, tx }) .map_err(|_| Error::WorkerCrashed)?; - while rx.is_empty() { - yield_now().await; - } - - rx.recv().map_err(|_| Error::WorkerCrashed)? + rx.await.map_err(|_| Error::WorkerCrashed)? } }