{"record":{"id":"a70053a394843558","repo":"firecracker-microvm/firecracker","slug":"error-receiving-api-request","errorCode":null,"errorMessage":"Error receiving API request.","messagePattern":"Error receiving API request\\.","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/firecracker/src/api_server_adapter.rs","lineNumber":110,"sourceCode":"            .map_err(|_| ())\n            .expect(\"one-shot channel closed\");\n    }\n\n    fn handle_request(&mut self, event_manager: &mut EventManager) {\n        if let Some(api_request) = self.request.take() {\n            let request_is_pause = *api_request == VmmAction::Pause;\n            self._handle_request(*api_request, event_manager);\n\n            // If the latest req is a pause request, temporarily switch to a mode where we\n            // do blocking `recv`s on the `from_api` receiver in a loop, until we get\n            // unpaused. The device emulation is implicitly paused since we do not\n            // relinquish control to the event manager because we're not returning from\n            // `process`.\n            if request_is_pause {\n                // This loop only attempts to process API requests, so things like the\n                // metric flush timerfd handling are frozen as well.\n                loop {\n                    let req = self.from_api.recv().expect(\"Error receiving API request.\");\n                    let req_is_resume = *req == VmmAction::Resume;\n                    self._handle_request(*req, event_manager);\n                    if req_is_resume {\n                        break;\n                    }\n                }\n            }\n        }\n    }\n}\nimpl MutEventSubscriber for ApiServerAdapter {\n    /// Handle a read event (EPOLLIN).\n    fn process(&mut self, event: Events, _: &mut EventOps) {\n        let source = event.fd();\n        let event_set = event.event_set();\n\n        if source == self.api_event_fd.as_raw_fd() && event_set == EventSet::IN {\n            let _ = self.api_event_fd.read();","sourceCodeStart":92,"sourceCodeEnd":128,"githubUrl":"https://github.com/firecracker-microvm/firecracker/blob/0a745def42ddf4cc2a744d79a08a27ff50b5d27a/src/firecracker/src/api_server_adapter.rs#L92-L128","documentation":"Error \"Error receiving API request.\" thrown in firecracker-microvm/firecracker.","triggerScenarios":"Thrown at src/firecracker/src/api_server_adapter.rs:110 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the API socket and event loop for errors that break request reception (closed fd, epoll error).","Verify the API thread did not exit or panic before the request arrived."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"0a745def42ddf4cc2a744d79a08a27ff50b5d27a","analyzedAt":"2026-08-19T05:27:02.517Z","contentChangedAt":"2026-08-19T05:27:02.517Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}