Hello Wilfried,

It looks like it. But it could be SendMessageA called by
WSACleanup, which waits until SendMessageA message is processed.
Maybe this is because the target window and winproc has
been destroyed by TCustomWSocket.Destroy?

-- 
Best regards,
Jack

Saturday, March 4, 2006, 10:24:04 AM, you wrote:

> Hello Jack,

> I'm checking the log again in your first mail:

> main thread ($728):
> 7c90eb94 +0000 ntdll.dll                          KiFastSystemCallRet
> 77d5f3de +0044 user32.dll                         SendMessageA
> 71ab8cc3 +489b WS2_32.dll                         WSACleanup
> 0048cdc4 +0018 Test.exe     WSocket      1789  +2 
> WSocket_Synchronized_WSACleanup
> 0048d5d9 +0035 Test.exe     WSocket      2221 +12 WSocketUnloadWinsock
> 0048e2d7 +007f Test.exe     WSocket      3507 +16 TCustomWSocket.Destroy
> 00493877 +0037 Test.exe     WSocket      6378  +6 TCustomLineWSocket.Destroy
> 00494c0e +0092 Test.exe     WSocketS      278 +15 TCustomWSocketServer.Destroy
> 00402e60 +0008 Test.exe     System                TObject.Free
> 00454be4 +0008 Test.exe     SysUtils              FreeAndNil
> 0049e2ad +0031 Test.exe     fTest         213  +5 TFrmTest.CleanUp
> 0049e148 +004c Test.exe     fTest         133 +15 TFrmTest.FormClose

> It seems that all is destroyed and that there is something 'hanging' in
> ntdll.dll. Is this right conclusion because I dont know the MadExcept ?

> ---
> Rgds, Wilfried [TeamICS]
> http://www.overbyte.be/eng/overbyte/teamics.html
> http://www.mestdagh.biz

> Saturday, March 4, 2006, 18:31, Jack wrote:

>> Hello Wilfried,

>> Thanks for the quick reply. No, I don't have a OnSessionClose or
>> OnChangeState handler. Destroying the server object will abort the
>> socket? Anyway, I also removed Abort() but the problem is still
>> happening from time to time as before.

>> -- 
>> Best regards,
>> Jack

>> Saturday, March 4, 2006, 1:21:05 AM, you wrote:

>>> Hello Jack,

>>> I read your mail better now :) No need for Abort. Just Free the
>>> component. Then OnSessionClose will not fire. What will fire is
>>> OnChangeState, so be aware if you do things there like updating GUI or
>>> so.

>>> ---
>>> Rgds, Wilfried [TeamICS]
>>> http://www.overbyte.be/eng/overbyte/teamics.html
>>> http://www.mestdagh.biz

>>> Saturday, March 4, 2006, 09:33, Jack wrote:

>>>> My application halts when WSocketServer is freed, not every time
>>>> though. But it happens once in a few times when the application is
>>>> closed. Here's the code snippet:

>>>>   if WSocketServer <> nil then
>>>>   begin
>>>>     WSocketServer.Abort();
>>>>     Log('Server closed');
>>>>     FreeAndNil(WSocketServer);
>>>>     Log('Server freed');
>>>>   end;

>>>> When this happens, the last message I get is 'Server closed' so
>>>> it dies in FreeAndNil(WSocketServer); Log() just add a line in
>>>> a TMemo. They were added after this problem was seen.

>>>> I enabled "Check for frozen main thread" in madexcept and got
>>>> this report:

>>>> main thread ($728):
>>>> 7c90eb94 +0000 ntdll.dll                          KiFastSystemCallRet
>>>> 77d5f3de +0044 user32.dll                         SendMessageA
>>>> 71ab8cc3 +489b WS2_32.dll                         WSACleanup
>>>> 0048cdc4 +0018 Test.exe     WSocket      1789  +2
>>>> WSocket_Synchronized_WSACleanup
>>>> 0048d5d9 +0035 Test.exe     WSocket      2221 +12 WSocketUnloadWinsock
>>>> 0048e2d7 +007f Test.exe     WSocket      3507 +16 TCustomWSocket.Destroy
>>>> 00493877 +0037 Test.exe     WSocket      6378  +6 
>>>> TCustomLineWSocket.Destroy
>>>> 00494c0e +0092 Test.exe     WSocketS      278 +15 
>>>> TCustomWSocketServer.Destroy
>>>> 00402e60 +0008 Test.exe     System                TObject.Free
>>>> 00454be4 +0008 Test.exe     SysUtils              FreeAndNil
>>>> 0049e2ad +0031 Test.exe     fTest         213  +5 TFrmTest.CleanUp
>>>> 0049e148 +004c Test.exe     fTest         133 +15 TFrmTest.FormClose


>>>> disassembling:
>>>> [...]
>>>> 0048cdac 1787   cmp     dword ptr [$4a5a14], 0
>>>> 0048cdb3        jnz     loc_48cdc4
>>>> 0048cdb5 1788   mov     eax, $48cdd4           ; 'WSACleanup'
>>>> 0048cdba        call    +$979 ($48d738)        ; WSocket.WSocketGetProc
>>>> 0048cdbf        mov     [$4a5a14], eax
>>>> 0048cdc4 1789 = call    dword ptr [$4a5a14]    ;
>>>> 0048cdc4 1789   WSACleanup (WS2_32.dll)
>>>> 0048cdca 1790   ret


>>>> Anything I'm doing wrong?




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

Reply via email to