BigPizzaV3/CodexPlusPlus · error · anyhow::Error

Remote Control recovery state lock poisoned

Error message

Remote Control recovery state lock poisoned

What it means

Raised in load_pending_remote_control_recoveries when the process-global Mutex guarding the Remote Control recovery state file is poisoned — another thread panicked while holding the lock — so pending recovery records cannot be read safely.

Source

Thrown at crates/codex-plus-core/src/remote_control_recovery.rs:53

}

pub fn config_generation(profile: &RelayProfile, target_provider: &str) -> String {
    let mut digest = Sha256::new();
    digest.update(profile.id.trim().as_bytes());
    digest.update([0]);
    digest.update(profile.config_contents.as_bytes());
    digest.update([0]);
    digest.update(target_provider.trim().as_bytes());
    format!("{:x}", digest.finalize())
}

pub fn load_pending_remote_control_recoveries(
    path: Option<&Path>,
) -> anyhow::Result<Vec<PendingRemoteControlRecovery>> {
    let path = pending_path(path);
    let _guard = state_lock()
        .lock()
        .map_err(|_| anyhow::anyhow!("Remote Control recovery state lock poisoned"))?;
    Ok(load_state(&path)?.requests)
}

pub fn enqueue_pending_remote_control_recovery(
    path: Option<&Path>,
    request: PendingRemoteControlRecovery,
) -> anyhow::Result<()> {
    validate_request(&request)?;
    let path = pending_path(path);
    let _guard = state_lock()
        .lock()
        .map_err(|_| anyhow::anyhow!("Remote Control recovery state lock poisoned"))?;
    let mut state = load_state(&path)?;
    // The first observed profile/provider snapshot is authoritative. Retries for the same
    // thread must not overwrite it after the user switches relay profiles.
    if state
        .requests
        .iter()

View on GitHub (pinned to fb3ebd9a82)

Solutions

  1. Restart the Codex++ process to reset the poisoned lock
  2. Investigate the earlier panic that poisoned the state lock
  3. Retry the load after other remote-control operations settle
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at crates/codex-plus-core/src/remote_control_recovery.rs:53 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of BigPizzaV3/CodexPlusPlus@fb3ebd9a82 (2026-08-17). Data as JSON: /api/errors/7ea05fe0be3b14a1. Report an issue: GitHub.