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
- Restart the gateway; a poisoned lock means a task panicked while holding it.
- 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.