Hello,
The crash is stable and always reproduced with the same error pattern. Another example of the crash is attached
crash2.txt
There are no DispatchSync calls in our code.
Here is the SCMD_DONE:
void OsBridge::SCMD_DONE(void *gh, base_cmd * cmd, SCSIUserParallelResponse * resp) {
Base * ghc = (Base * )gh;
SCSIUserParallelResponse lResp = *resp;
lResp.version = kScsiUserParallelTaskResponseCurrentVersion1;
lResp.fControllerTaskIdentifier = cmd->req.fControllerTaskIdentifier;
lResp.fTargetID = cmd->req.fTargetID;
__block OSAction * act = cmd->action;
ghc->clean_cmd(cmd);
ghc->ivars->sentQueue->DispatchAsync(^{
ghc->ParallelTaskCompletion(act, lResp);
OSSafeReleaseNULL(act);
});
}
SCMD_DONE - can be called from the Interrupt processing thread (Interrupt DispatchQueue)
sentQueue - DispatchQueue is used only for ParallelTaskCompletion calls.
We understand that the reason for the issue is a deadlock. We do not understand the reason and how we can fix it. Could you give any hints?