Jump to content

mattgorringe

Members
  • Content Count

    1
  • Joined

  • Last visited

Posts posted by mattgorringe


  1. 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.

     

    image.thumb.png.90b2f7c76e157e5e87217253b006f7af.png

     

    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.

     

     

     

×