diff --git a/codex-rs/core/src/codex.rs b/codex-rs/core/src/codex.rs index c3653d12fb..b364cf844f 100644 --- a/codex-rs/core/src/codex.rs +++ b/codex-rs/core/src/codex.rs @@ -50,6 +50,7 @@ use mcp_types::RequestId; use serde_json; use serde_json::Value; use tokio::sync::Mutex; +use tokio::sync::OwnedRwLockReadGuard; use tokio::sync::RwLock; use tokio::sync::oneshot; use tokio_util::sync::CancellationToken; @@ -894,9 +895,12 @@ impl Session { Ok(()) } - pub(crate) async fn current_exec_policy(&self) -> Arc> { - let state = self.state.lock().await; - state.session_configuration.exec_policy.clone() + pub(crate) async fn current_exec_policy(&self) -> OwnedRwLockReadGuard { + let exec_policy = { + let state = self.state.lock().await; + state.session_configuration.exec_policy.clone() + }; + exec_policy.read_owned().await } /// Emit an exec approval request event and await the user's decision. diff --git a/codex-rs/core/src/tools/handlers/shell.rs b/codex-rs/core/src/tools/handlers/shell.rs index 47a5495063..a09f198b3c 100644 --- a/codex-rs/core/src/tools/handlers/shell.rs +++ b/codex-rs/core/src/tools/handlers/shell.rs @@ -233,7 +233,6 @@ impl ShellHandler { let features = session.features().await; let exec_policy = session.current_exec_policy().await; - let exec_policy = exec_policy.read().await; let req = ShellRequest { command: exec_params.command.clone(), cwd: exec_params.cwd.clone(), diff --git a/codex-rs/core/src/unified_exec/session_manager.rs b/codex-rs/core/src/unified_exec/session_manager.rs index e1b3672fce..c2b1c2be06 100644 --- a/codex-rs/core/src/unified_exec/session_manager.rs +++ b/codex-rs/core/src/unified_exec/session_manager.rs @@ -557,7 +557,6 @@ impl UnifiedExecSessionManager { let mut orchestrator = ToolOrchestrator::new(); let mut runtime = UnifiedExecRuntime::new(self); let exec_policy = context.session.current_exec_policy().await; - let exec_policy = exec_policy.read().await; let req = UnifiedExecToolRequest::new( command.to_vec(), cwd,