{"record":{"id":"a06deedcd1674597","repo":"zed-industries/zed","slug":"commit-data-reader-task-dropped-response","errorCode":null,"errorMessage":"commit data reader task dropped response","messagePattern":"commit data reader task dropped response","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/git/src/repository.rs","lineNumber":154,"sourceCode":"    sha: Oid,\n    response_tx: oneshot::Sender<Result<CommitData>>,\n}\n\npub struct CommitDataReader {\n    request_tx: async_channel::Sender<CommitDataRequest>,\n    _task: Task<()>,\n}\n\nimpl CommitDataReader {\n    pub async fn read(&self, sha: Oid) -> Result<CommitData> {\n        let (response_tx, response_rx) = oneshot::channel();\n        self.request_tx\n            .send(CommitDataRequest { sha, response_tx })\n            .await\n            .map_err(|_| anyhow!(\"commit data reader task closed\"))?;\n        response_rx\n            .await\n            .map_err(|_| anyhow!(\"commit data reader task dropped response\"))?\n    }\n\n    #[cfg(any(test, feature = \"test-support\"))]\n    pub fn for_test(\n        executor: BackgroundExecutor,\n        resolve: impl 'static + Send + Sync + Fn(Oid) -> Result<CommitData>,\n    ) -> Self {\n        let (request_tx, request_rx) = smol::channel::bounded::<CommitDataRequest>(64);\n        let resolve = Arc::new(resolve);\n        let delay_executor = executor.clone();\n        let task = executor.spawn(async move {\n            while let Ok(CommitDataRequest { sha, response_tx }) = request_rx.recv().await {\n                delay_executor.simulate_random_delay().await;\n                response_tx.send(resolve(sha)).ok();\n            }\n        });\n\n        Self {","sourceCodeStart":136,"sourceCodeEnd":172,"githubUrl":"https://github.com/zed-industries/zed/blob/5a9b9558db01a6b906cec2fb70a797affdc58cdd/crates/git/src/repository.rs#L136-L172","documentation":"The request reached the commit data reader task, but the response oneshot receiver failed — the task dropped the response sender without answering (task dropped mid-processing or panicked on an earlier request). Distinguish from the send failure: the channel was alive, but the answer never came back.","triggerScenarios":"Thrown at crates/git/src/repository.rs:154 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry the read once — a transient drop during shutdown may succeed on a fresh reader","If persistent, mark the reader task as failed and stop queueing requests to it","Capture panics in the reader loop with catch_unwind so drops are explainable in logs"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"5a9b9558db01a6b906cec2fb70a797affdc58cdd","analyzedAt":"2026-08-20T19:29:52.058Z","contentChangedAt":"2026-08-20T19:29:52.058Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}