Avoid memory leaks when using TRelayer
[mgsmtp.git] / Relay.pas
index bcbcc9d92ee6842c5de66b050df69c6890e949e1..017d943b22463595f184cf51911f176ea112bca5 100644 (file)
--- a/Relay.pas
+++ b/Relay.pas
@@ -176,6 +176,7 @@ begin
    FTransactionComplete:= false;
    FRoutingTarget:= RoutingTable.GetRouteInfo(Envelope.RelayHost);
    Response:= TRFCReply.Create;
+   TCP:= nil;
    FillChar(SMTPExtensions, SizeOf(TSMTPExtensions), #0);
 end;
 
@@ -183,6 +184,7 @@ destructor TRelayer.Destroy;
 begin
    FRoutingTarget.Free;
    Response.Free;
+   if TCP <> nil then TCP.Free;
    inherited Destroy;
 end;
 
@@ -340,6 +342,7 @@ begin
          Inc(i);
       end;
       Result:= TCP.Connected;
+      if not TCP.Connected then FreeAndNil(TCP);
    end
    else Result:= false;
    MXList.Free;
@@ -539,7 +542,7 @@ procedure TRelayer.CloseConnection;
 begin
    TCP.SendCommand(SMTP_C_QUIT);
    {TCP.ReadResponse(Response);}
-   TCP.Free;
+   FreeAndNil(TCP);
 end;