[fpc-pascal] How to close TInetServer without except?

silvioprog silvioprog at gmail.com
Fri May 3 18:48:07 CEST 2013


2013/5/3 Zaher Dirkey <parmaja at gmail.com>

>
> On Fri, May 3, 2013 at 6:57 PM, silvioprog <silvioprog at gmail.com> wrote:
>
>> when I close the server with one or more clients connected, I got a
>> memory leak.
>
>
> Check if the thread freed?
> Try to stop server manually (by button or in Close event in the form)
>
> Best Regards
> Zaher Dirkey
>

Yes, I already do it.

Now I'm trying to terminate all unterminated clients:

destructor TTcpIpServerSocketThread.Destroy;
begin
  DoTerminateClients;
  FClients.Free;
  FSocket.Free;
  inherited Destroy;
end;

....

procedure TTcpIpServerSocketThread.DoTerminateClients;
var
  VClients: TList;
  VClient: Pointer;
  VThread: TTcpIpServerClientThread;
begin
  VClients := FClients.LockList;
  try
    for VClient in VClients do
    begin
      VThread := TTcpIpServerClientThread(VClient);
      if Assigned(VThread) and not VThread.Finished then
      begin
        VThread.FreeOnTerminate := False;
        VThread.Terminate;
        FreeAndNil(VThread.FClientSocket);
        VThread.WaitFor;
        FreeAndNil(VThread);
      end;
    end;
  finally
    FClients.UnlockList;
  end;
end;

I'm testing it, on Windows it worked fine, I'll test on Linux now...

-- 
Silvio Clécio
My public projects - github.com/silvioprog
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20130503/063aac55/attachment.html>


More information about the fpc-pascal mailing list