zeroclaw-labs/zeroclaw · error

cancel_tokens lock poisoned

Error message

cancel_tokens lock poisoned

What it means

Error "cancel_tokens lock poisoned" thrown in zeroclaw-labs/zeroclaw.

Source

Thrown at crates/zeroclaw-gateway/src/api.rs:1885

) -> impl IntoResponse {
    if let Err(e) = require_auth(&state, &headers) {
        return e.into_response();
    }

    let Some(ref backend) = state.session_backend else {
        return (
            StatusCode::NOT_FOUND,
            Json(serde_json::json!({"error": "Session persistence is disabled"})),
        )
            .into_response();
    };

    let session_key = resolve_gateway_session_key(&id, |key| backend.session_exists(key));

    let token = state
        .cancel_tokens
        .lock()
        .expect("cancel_tokens lock poisoned")
        .remove(&session_key);
    if let Some(token) = token {
        token.cancel();
        ::zeroclaw_log::record!(
            INFO,
            ::zeroclaw_log::Event::new(module_path!(), ::zeroclaw_log::Action::Note)
                .with_attrs(::serde_json::json!({"session_key": session_key})),
            "cancelled in-flight turn for deleted session"
        );
    }

    match backend.delete_session(&session_key) {
        Ok(true) => Json(serde_json::json!({"deleted": true, "session_id": id})).into_response(),
        Ok(false) => (
            StatusCode::NOT_FOUND,
            Json(serde_json::json!({"error": "Session not found"})),
        )
            .into_response(),

View on GitHub (pinned to 88bb9c8533)

Solutions

  1. Restart the gateway; a poisoned lock means a task panicked while holding it.
  2. Report a bug with the earlier panic backtrace so the poisoning root cause can be fixed.

When it happens

Trigger: Thrown at crates/zeroclaw-gateway/src/api.rs:1885 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23). Data as JSON: /api/errors/7c175777bb8626d3. Report an issue: GitHub.