| Previous | Next |
| kIOUSBDevicePortWasNotSuspended | kIOUSBDeviceNotHighSpeed |
kIOUSBClearPipeStallNotRecursive
Recovery was invoked from an unsafe call path
kIOUSBClearPipeStallNotRecursive is an IOUSBFamily lifecycle error: the same pipe is already being processed by ClearPipeStall when another call attempts to enter that recovery path. It does not identify a new hardware fault. The failure is in the caller's sequencing, often when a completion callback tries to clear the stall immediately while the earlier recovery still owns the pipe.
A pipe-stall recovery can return outstanding operations to their completion handlers. That makes reentrancy especially dangerous: a callback can trigger a second recovery request before the first one has finished changing pipe state. Repeating the same call in a loop does not make the recovery safe and can hide the original ordering error.
What to capture and change
- Record the endpoint address, transfer direction, pipe identity, callback stack, and the operation that first detected the stalled state.
- Serialize recovery per pipe. Keep one explicit state such as active, draining, clearing, or ready instead of allowing every completion handler to initiate a reset.
- Move recovery out of the callback that observed the failure. Complete or account for outstanding requests before making another pipe-state change.
- Check the device protocol before deciding whether controller-side clearing is enough or whether the device also needs a standard endpoint-halt request.
References
- Apple: IOUSBFamily error codes
- Apple: handling stalls, halts, and data-toggle resynchronization
- IOUSBFamily source: IOUSBPipe stall handling
Looking for a different code? Search another status or error code.