mattgorringe 0 Posted November 8, 2022 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. Share this post Link to post
Lajos Juhász 293 Posted November 9, 2022 Never had deadlock when using amblocking. On the other hand in D11 sometimes amCancelDialog will not work on query. You must change for the connection before and change back after the query is finished. Share this post Link to post