[fpc-devel] SimpleIPC and TWinMsgServerComm.PeekMessage
    Juha Manninen 
    juha.manninen62 at gmail.com
       
    Wed Oct  9 19:50:53 CEST 2013
    
    
  
On Wed, Oct 9, 2013 at 6:10 PM, Sven Barth <pascaldragon at googlemail.com> wrote:
> I've looked at the code a bit more and the problem must be something else.
> MsgWaitForMultipleObjects waits on a FHWND which it created itself and
> additionally waits for the reception of a message through SendMessage. So
> this should not fail except maybe the creation of the window failed. Could
> you print the error message returned by "SysErrorMessage(GetLastOSError)" if
> put at the then-part of "if R=WAIT_FAILED"?
Funny, it gives the error in Finnish language. Translated meaning is
"Invalid handle".
Can you reproduce it? You must use the latest Lazarus trunk for
testing. Yesterday I fixed TForm1.GetLHelpFilename in unit
HelpConnectionUnit1. Apparently it was not tested on Windows until
yesterday.
This my my patch after preventing a potential INFINITE sleep :
--- a/packages/fcl-process/src/win/simpleipc.inc
+++ b/packages/fcl-process/src/win/simpleipc.inc
@@ -146,7 +146,9 @@ begin
     if (TimeOut=0) then
       TimeOut:=Integer(INFINITE);
     R:=MsgWaitForMultipleObjects(1,FHWND,False,TimeOut,QS_SENDMESSAGE);
-    B:=(R<>WAIT_TIMEOUT);
+    if (R=WAIT_FAILED) and (TimeOut<>INFINITE) then
+      Sleep(TimeOut);
+    B:=(R<>WAIT_TIMEOUT) and (R<>WAIT_FAILED);
     end;
   If B then
     Repeat
Regards,
Juha
    
    
More information about the fpc-devel
mailing list