Hi Can someone take look at this call stack and threadlock that appears to happen very occasionally with our app on one VM.
I have not been able to reproduce on a dev machine.
We are using amBlocking for the firedac query but getting a call to check synchronize twice where we get a threadlock on second one.
This is main thread.
Have checked the 22.0 code and no changes this is from v19.0, procedure in FireDAC.Stan.Async:
procedure TFDStanAsyncExecutor.Run
Here is the offending code:
else if (FMode = amNonBlocking) or not (
(rMsg.message >= WM_KEYDOWN) and (rMsg.message <= WM_DEADCHAR) and
((FAsyncDlg = nil) or not FAsyncDlg.IsFormActive) or
(rMsg.message >= WM_MOUSEFIRST) and (rMsg.message <= WM_MOUSELAST) and
((FAsyncDlg = nil) or not FAsyncDlg.IsFormMouseMessage(rMsg)) or
(rMsg.message >= WM_SYSKEYDOWN) and (rMsg.message <= WM_SYSDEADCHAR)
) then begin
TranslateMessage(rMsg);
DispatchMessage(rMsg);
end;
To fix im proposing to add in this to the above code block so messages can not be processed with amBlocking.
if FMode <> amBlocking then
Anyone else seen this behavior?
Now also it could be possible for a threadlock if we were using amNonBlocking from what i can see - that would also be bad.