Prechádzať zdrojové kódy

Memory leak when connection fails

Source commit: ea76114bd943a405e72c17779dcd7a576c22a475
Martin Prikryl 9 rokov pred
rodič
commit
24c21a712c
1 zmenil súbory, kde vykonal 19 pridanie a 13 odobranie
  1. 19 13
      source/windows/TerminalManager.cpp

+ 19 - 13
source/windows/TerminalManager.cpp

@@ -502,28 +502,34 @@ void __fastcall TTerminalManager::FreeTerminal(TTerminal * Terminal)
     FQueues->Delete(Index);
     FTerminationMessages->Delete(Index);
 
-    if (ActiveTerminal && (Terminal == ActiveTerminal))
+    try
     {
-      if ((Count > 0) && !FDestroying)
+      if (ActiveTerminal && (Terminal == ActiveTerminal))
       {
-        ActiveTerminal = Terminals[Index < Count ? Index : Index - 1];
+        if ((Count > 0) && !FDestroying)
+        {
+          ActiveTerminal = Terminals[Index < Count ? Index : Index - 1];
+        }
+        else
+        {
+          ActiveTerminal = NULL;
+        }
       }
       else
       {
-        ActiveTerminal = NULL;
+        SaveTerminal(Terminal);
       }
     }
-    else
+    // ActiveTerminal = NULL throws EAbort when Login dialog is closed
+    __finally
     {
-      SaveTerminal(Terminal);
-    }
+      // only now all references to/from queue (particularly events to explorer)
+      // are cleared
+      delete Queue;
+      delete Terminal;
 
-    // only now all references to/from queue (particularly events to explorer)
-    // are cleared
-    delete Queue;
-    delete Terminal;
-
-    DoTerminalListChanged();
+      DoTerminalListChanged();
+    }
   }
 }
 //---------------------------------------------------------------------------