Ver Mensaje Individual
  #2  
Antiguo 04-01-2013
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Reputación: 21
jars Va por buen camino
TJvTimer no libera el thread

Hola amigos.
En un programa que actua como servidor tcp usando TServerSocket con Delphi 7 lo que hago es lo siguiente.
Cuando alguien se conecta al puerto se dispara el evento OnConnect del socket, alli creo una instancia de una clase derivada de TJvTimer a la que le asigno el socket que se acaba de conectar y si al cabo de 1 segundo no recibo en el evento read del socket la firma del cliente se dispara el evento OnTimer y hace un close del socket y el free de la clase.
Viene funcionando varios dias pero en un momento que puede ser despues de 1 semana o algunas horas, ningun cliente se puede conectar y mirando el taskmanager se puede ver que se empiezan a incrementar las hebras del programa hasta que termina reventando. El MadException me tira una chirrera de este bloque:

thread $1fe70 (TJvTimerThread): <priority:2>
7c82860c ntdll.dll KiFastSystemCallRet
7c827d27 ntdll.dll NtWaitForSingleObject
77e31d18 kernel32.dll WaitForSingleObjectEx
77e31c88 kernel32.dll WaitForSingleObject
0044e7b4 acdsrv.exe Classes TThread.WaitFor
0044e3ed acdsrv.exe Classes TThread.Destroy
005d495a acdsrv.exe JvTimer TJvTimerThread.Destroy
004046f0 acdsrv.exe System TObject.Free
005d4ba6 acdsrv.exe JvTimer TJvTimer.Destroy
004046f0 acdsrv.exe System TObject.Free
006496b6 acdsrv.exe Main 1183 TNewSocket.TimerEvent
005d4dd6 acdsrv.exe JvTimer TJvTimer.Timer
005d4a4c acdsrv.exe JvTimer TJvTimerThread.Execute
0042ad06 acdsrv.exe madExcept HookedTThreadExecute
0044e27c acdsrv.exe Classes ThreadProc
004055dc acdsrv.exe System ThreadWrapper
0042ac9b acdsrv.exe madExcept ThreadExceptFrame
>> created by main thread ($1f91c) at:
005d48b9 acdsrv.exe JvTimer TJvTimerThread.Create

Se puede ver que no se estan liberando los threads.
No tengo idea de cual es el disparador pero justo cuando no se pueden conectar es que se ve que empiezan acrecer los threads.
Puede ser que por algun motivo se esten perdiendo mensajes de la cola de mensajes?
Alguien tiene alguna idea.
Los sockets son non blocking y pasa tanto en windows Server 2003 como 2008.

Gracias.
Responder Con Cita