Explorar el Código

Fix querywindow memory leak of connection/transaction

Reinier Olislagers hace 11 años
padre
commit
efbe3fe02e
Se han modificado 5 ficheros con 584 adiciones y 577 borrados
  1. 1 0
      TurboBird.lpi
  2. 0 1
      newgen.pas
  3. 3 1
      querywindow.lfm
  4. 568 569
      querywindow.lrs
  5. 12 6
      querywindow.pas

+ 1 - 0
TurboBird.lpi

@@ -182,6 +182,7 @@
         <Filename Value="newgen.pas"/>
         <IsPartOfProject Value="True"/>
         <ComponentName Value="fmNewGen"/>
+        <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
         <UnitName Value="NewGen"/>
       </Unit10>

+ 0 - 1
newgen.pas

@@ -102,7 +102,6 @@ begin
       fmMain.SQLQuery1.Next;
     end;
     fmMain.SQLQuery1.Close;
-
   end;
 end;
 

+ 3 - 1
querywindow.lfm

@@ -12,11 +12,12 @@ object fmQueryWindow: TfmQueryWindow
   Menu = MainMenu1
   OnClose = FormClose
   OnCreate = FormCreate
+  OnDestroy = FormDestroy
   OnKeyDown = FormKeyDown
   OnShow = FormShow
   PopupMenu = pmTab
   Position = poScreenCenter
-  LCLVersion = '1.2.0.3'
+  LCLVersion = '1.3'
   object Panel1: TPanel
     Left = 0
     Height = 60
@@ -754,6 +755,7 @@ object fmQueryWindow: TfmQueryWindow
         ShiftMask = [ssShift, ssAlt, ssCtrl]
         Command = emcMouseLink
       end>
+    MouseTextActions = <>
     MouseSelActions = <    
       item
         ClickDir = cdDown

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 568 - 569
querywindow.lrs


+ 12 - 6
querywindow.pas

@@ -110,6 +110,7 @@ type
     procedure FindDialog1Find(Sender: TObject);
     procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
     procedure FormCreate(Sender: TObject);
+    procedure FormDestroy(Sender: TObject);
     procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
     procedure FormShow(Sender: TObject);
     procedure lmCloseTabClick(Sender: TObject);
@@ -898,16 +899,13 @@ begin
     until QT.fTerminated or (fCanceled);
     if QT.Error then
       ShowMessage(QT.ErrorMsg);
-
   finally
     QT.Free;
   end;
-
 end;
 
 
 { Run current SQL, 0 for auto-detect type }
-
 procedure TfmQueryWindow.tbRunClick(Sender: TObject);
 begin
   CallExecuteQuery(qtUnknown);
@@ -946,9 +944,7 @@ begin
   fdbIndex:= dbIndex;
   RegRec:= fmMain.RegisteredDatabases[dbIndex].RegRec;
 
-  // Initialize new instance of IBConnection and SQLTransaction to the current Query Window
-  ibConnection:= TIBConnection.Create(nil);
-  SqlTrans:= TSQLTransaction.Create(nil);
+  // Set instances of IBConnection and SQLTransaction for the current Query Window
   fmMain.setTransactionIsolation(SqlTrans.Params);
   SqlTrans.DataBase:= ibConnection;
 
@@ -1698,10 +1694,20 @@ var
   F:TextFile;
   str:string;
 begin
+  // Initialize new instance of IBConnection and SQLTransaction
+  ibConnection:= TIBConnection.Create(nil);
+  SqlTrans:= TSQLTransaction.Create(nil);
   SynCompletion1.ItemList.CommaText:= 'create,table,Select,From,INTEGER,FLOAT';
   SortSynCompletion;
 end;
 
+procedure TfmQueryWindow.FormDestroy(Sender: TObject);
+begin
+  // Clean up resources to avoid memory leaks
+  SQLTrans.Free;
+  IBConnection.Free;
+end;
+
 procedure TfmQueryWindow.FormKeyDown(Sender: TObject; var Key: Word;
   Shift: TShiftState);
 begin

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio