Hello Wilfred!
Yes, I get the same behavior when running the application from within the
IDE. So I traced the code up until the application stops to respond. (And
yes, we mean the same thing: the application freezes or hangs so that You
can't quit and You can not move or close the window.)
The trace disappears in the function WSocket_Synchronized_WSAAsyncSelect in
WSocket.pas. You can see the actual line where something happens in the code
snippet below:
function WSocket_Synchronized_WSAAsyncSelect(
s: TSocket; HWindow: HWND;
wMsg: u_int; lEvent: Longint): Integer;
begin
SaveTrace('Start WSocket.pas: function
WSocket_Synchronized_WSAAsyncSelect');
if @FWSAAsyncSelect = nil then
@FWSAAsyncSelect := WSocketGetProc('WSAAsyncSelect');
SaveTrace('Hang on the line below this row: Result :=
FWSAAsyncSelect...');
Result := FWSAAsyncSelect(s, HWindow, wMsg, lEvent); // <------
Something happens here
SaveTrace('Hang on the line obove this row: Result :=
FWSAAsyncSelect...');
SaveTrace('End WSocket.pas: function
WSocket_Synchronized_WSAAsyncSelect');
end;
Does this make any sense?
Best Regards
Henrik
Ps. If there by any chance is someone who want a bit more "in depth facts",
I also attached the following trace logs :-)
I added the SaveTrace procedure seen in the snippet above at the first line
and the last line of the following functions and procedures:
WSocket.pas: function XSocketWindowProc
WSocket.pas: procedure TCustomWSocket.WndProc
WSocket.pas: procedure TCustomWSocket.WMAsyncGetHostByName
WSocket.pas: procedure TCustomWSocket.TriggerDNSLookupDone
SmtpProt.pas: procedure TCustomSmtpClient.WSocketDnsLookupDone
WSocket.pas: procedure TCustomSocksWSocket.Connect;
WSocket.pas: procedure TCustomWSocket.Connect
WSocket.pas: function WSocket_Synchronized_WSAAsyncSelect
So after the ConnectButton in the example is pressed I get the following
results on computers where everything works:
First time the SmtpTestForm is created and ConnectButton is pressed:
--------------------------------------------------------------------
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
Start WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
Start WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
Start WSocket.pas: procedure TCustomWSocket.WndProc
Start WSocket.pas: procedure TCustomWSocket.WMAsyncGetHostByName
Start WSocket.pas: procedure TCustomWSocket.TriggerDNSLookupDone
Start SmtpProt.pas: procedure TCustomSmtpClient.WSocketDnsLookupDone
Start WSocket.pas: procedure TCustomSocksWSocket.Connect
Start WSocket.pas: procedure TCustomWSocket.Connect
Start WSocket.pas: function
WSocket_Synchronized_WSAAsyncSelect
Hang on the line below this row: Result :=
FWSAAsyncSelect...
Hang on the line obove this row: Result :=
FWSAAsyncSelect...
End WSocket.pas: function
WSocket_Synchronized_WSAAsyncSelect
End WSocket.pas: procedure TCustomWSocket.Connect
End SmtpProt.pas: procedure TCustomSmtpClient.WSocketDnsLookupDone
End WSocket.pas: procedure TCustomWSocket.TriggerDNSLookupDone
End WSocket.pas: procedure TCustomWSocket.WMAsyncGetHostByName
End WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
Start WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
Start WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
Start WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
I close the SmtpTestForm, release it and create it again.
When ConnectButton is pressed this time I get the following trace:
------------------------------------------------------------------
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
Start WSocket.pas: procedure TCustomWSocket.WndProc
Start WSocket.pas: procedure TCustomWSocket.WMAsyncGetHostByName
Start WSocket.pas: procedure TCustomWSocket.TriggerDNSLookupDone
Start SmtpProt.pas: procedure TCustomSmtpClient.WSocketDnsLookupDone
Start WSocket.pas: procedure TCustomSocksWSocket.Connect
Start WSocket.pas: procedure TCustomWSocket.Connect
Start WSocket.pas: function
WSocket_Synchronized_WSAAsyncSelect
Hang on the line below this row: Result :=
FWSAAsyncSelect...
Hang on the line obove this row: Result :=
FWSAAsyncSelect...
End WSocket.pas: function
WSocket_Synchronized_WSAAsyncSelect
End WSocket.pas: procedure TCustomWSocket.Connect
End SmtpProt.pas: procedure TCustomSmtpClient.WSocketDnsLookupDone
End WSocket.pas: procedure TCustomWSocket.TriggerDNSLookupDone
End WSocket.pas: procedure TCustomWSocket.WMAsyncGetHostByName
End WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
Start WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
Start WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
Start WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
So now to the interesting part. On computers where the application freezes I
get the following trace.
First time the SmtpTestForm is created and ConnectButton is pressed:
--------------------------------------------------------------------
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
Start WSocket.pas: procedure TCustomWSocket.WndProc
Start WSocket.pas: procedure TCustomWSocket.WMAsyncGetHostByName
Start WSocket.pas: procedure TCustomWSocket.TriggerDNSLookupDone
Start SmtpProt.pas: procedure TCustomSmtpClient.WSocketDnsLookupDone
Start WSocket.pas: procedure TCustomSocksWSocket.Connect
Start WSocket.pas: procedure TCustomWSocket.Connect
Start WSocket.pas: function
WSocket_Synchronized_WSAAsyncSelect
Hang on the line below this row: Result :=
FWSAAsyncSelect...
Hang on the line obove this row: Result :=
FWSAAsyncSelect...
End WSocket.pas: function
WSocket_Synchronized_WSAAsyncSelect
End WSocket.pas: procedure TCustomWSocket.Connect
End SmtpProt.pas: procedure TCustomSmtpClient.WSocketDnsLookupDone
End WSocket.pas: procedure TCustomWSocket.TriggerDNSLookupDone
End WSocket.pas: procedure TCustomWSocket.WMAsyncGetHostByName
End WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
Start WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
Start WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
Start WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: procedure TCustomWSocket.WndProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
I close the SmtpTestForm, release it and create it again.
When ConnectButton is pressed this time I get the following trace:
------------------------------------------------------------------
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
End WSocket.pas: function XSocketWindowProc
Start WSocket.pas: function XSocketWindowProc
Start WSocket.pas: procedure TCustomWSocket.WndProc
Start WSocket.pas: procedure TCustomWSocket.WMAsyncGetHostByName
Start WSocket.pas: procedure TCustomWSocket.TriggerDNSLookupDone
Start SmtpProt.pas: procedure TCustomSmtpClient.WSocketDnsLookupDone
Start WSocket.pas: procedure TCustomSocksWSocket.Connect
Start WSocket.pas: procedure TCustomWSocket.Connect
Start WSocket.pas: function
WSocket_Synchronized_WSAAsyncSelect
Hang on the line below this row: Result :=
FWSAAsyncSelect...
-----Ursprungligt meddelande-----
Från: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] För
Wilfried Mestdagh
Skickat: den 12 december 2006 13:17
Till: ICS support mailing
Ämne: Re: [twsocket] Freeze when using smtp after recreating its parentform
Hello Henrik,
Do you have the same problem in the IDE ? Because this way you can check
witch code line never comes back (freeze). If not eventually open a console
window and write some debug information into it to see where it happens.
Your approach is normal. I do this all the time, however I almost never use
forms for it. Normally I have an object containing the component, eg
TSmtpClient, another object that creates / handles / destroy the TSmtpClient
objects. But in principle it is the same. It can as whell be a DataModule, a
Form or whatever other object.
Question: We do understeand the word 'Freeze' the right way ? Form cannot
moved, closed, application cannot quit, etc... Right ?
---
Rgds, Wilfried [TeamICS]
http://www.overbyte.be/eng/overbyte/teamics.html
http://www.mestdagh.biz
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be