<div dir="ltr">2013/5/3 Zaher Dirkey <span dir="ltr"><<a href="mailto:parmaja@gmail.com" target="_blank">parmaja@gmail.com</a>></span><br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div dir="ltr"><div class="gmail_extra"><div class="im"><br><div class="gmail_quote">On Fri, May 3, 2013 at 6:57 PM, silvioprog <span dir="ltr"><<a href="mailto:silvioprog@gmail.com" target="_blank">silvioprog@gmail.com</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">when I close the server with one or more clients connected, I got a memory leak.</blockquote>

</div><br></div><div style="font-family:tahoma,sans-serif">
Check if the thread freed?<br></div><div style="font-family:tahoma,sans-serif">Try to stop server manually (by button or in Close event in the form)</div><br><div dir="ltr"><span style="font-family:'courier new',monospace">Best Regards<span class=""><font color="#888888"><br>


Zaher Dirkey</font></span></span></div></div></div></blockquote></div><div><br></div><div style>Yes, I already do it.</div><div style><br></div><div style>Now I'm trying to terminate all unterminated clients:</div><div>

<br></div><div><div>destructor TTcpIpServerSocketThread.Destroy;</div><div>begin</div><div>  DoTerminateClients;</div><div>  FClients.Free;</div><div>  FSocket.Free;</div><div>  inherited Destroy;</div><div>end;</div></div>

<div><br></div><div>....</div><div><br></div><div><div>procedure TTcpIpServerSocketThread.DoTerminateClients;</div><div>var</div><div>  VClients: TList;</div><div>  VClient: Pointer;</div><div>  VThread: TTcpIpServerClientThread;</div>

<div>begin</div><div>  VClients := FClients.LockList;</div><div>  try</div><div>    for VClient in VClients do</div><div>    begin</div><div>      VThread := TTcpIpServerClientThread(VClient);</div><div>      if Assigned(VThread) and not VThread.Finished then</div>

<div>      begin</div><div>        VThread.FreeOnTerminate := False;</div><div>        VThread.Terminate;</div><div>        FreeAndNil(VThread.FClientSocket);</div><div>        VThread.WaitFor;</div><div>        FreeAndNil(VThread);</div>

<div>      end;</div><div>    end;</div><div>  finally</div><div>    FClients.UnlockList;</div><div>  end;</div><div>end;</div></div><div><br></div><div style>I'm testing it, on Windows it worked fine, I'll test on Linux now...</div>

<div><br></div>-- <br>Silvio Clécio<br>My public projects - <a href="http://github.com/silvioprog" target="_blank">github.com/silvioprog</a>
</div></div>