REST-DataWare icon indicating copy to clipboard operation
REST-DataWare copied to clipboard

[Bug] Memory Leak em MassiveObject quando utiliza RESTDWIdDatabase.ApplyUpdates

Open tatianepeixoto opened this issue 3 years ago • 1 comments

Realizei um teste utilizando o RESTDWClientSQL, onde quando MassiveType é do tipo mtMassiveObject; apos inserção do registro aplico o RESTDWIdDatabase1.ApplyUpdates gera memory leaks.

Se utilizar o MassiveType mtMassiveCache nao gera memory Leaks!

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  qry_ExecSQL : TRESTDWClientSQL;
  bError    : Boolean;
  msgErro   : String;
  iSeqGru  : Integer;
begin
  try
    try
      qry_ExecSQL := TRESTDWClientSQL.Create(Self);
      qry_ExecSQL.DataBase             := dm.RESTDWDataBase1;
      qry_ExecSQL.BinaryCompatibleMode := False;
      qry_ExecSQL.MassiveCache         := dm.DWMassiveCache1;
      qry_ExecSQL.MassiveType          := mtMassiveObject; // ;  mtMassiveCache;

      // 1º BLOCO
      with qry_ExecSQL, SQL do
      begin
        Close;
        Clear;
        Add('INSERT INTO TB_USUARIOS_CONECTADOS ');
        Add('       (ID_USUARIO, ');
        Add('        NOME_USUARIO, ');
        Add('        MODULO_SYSTEM, ');
        Add('        ID_EMPSYS, ');
        Add('        DATA_CONEXAO, ');
        Add('        HORA_CONEXAO)');
        Add('VALUES (:pIdUser, ');
        Add('        :pNome_Usuario, ');
        Add('        :pModulo, ');
        Add('        :pIdEmpSys, ');
        Add('        :pData, ');
        Add('        :pHora)');
        ParamByName('pIdUser').AsInteger      := 310;
        ParamByName('pNome_Usuario').AsString := Edit1.Text;
        ParamByName('pModulo').AsString       := 'ESTQ';
        ParamByName('pIdEmpSys').AsInteger    := 10;
        ParamByName('pData').AsDateTime       := Date;
        ParamByName('pHora').AsDateTime       := Now;
        ExecSQL;
      end;

    finally
      FreeAndNil(qry_ExecSQL);
    end;

    SHOWMESSAGE(INTTOSTR(dm.DWMassiveCache1.MassiveCount));
    if dm.DWMassiveCache1.MassiveCount > 0 then
    begin
     dm.RESTDWDataBase1.ApplyUpdates(dm.DWMassiveCache1, bError, msgErro); 
     // quando é chamado essa funcao gera memory leaks

     If bError Then
     begin
       Showmessage(msgErro);
       raise exception.Create('');
     end
     else
       Showmessage('OK');
    end;
  except
    Showmessage('Erro');
  end;
end;                                                                      

Informações técnicas:

  • OS: WINDOWS 10
  • Versão do RDW - Version : v2.0.3-3088(Savage Reign - SourceForge)
  • Lazarus 2.0.10

erro_ApplyUpdates.txt

tatianepeixoto avatar Aug 25 '22 17:08 tatianepeixoto

Segue o projeto exemplo para teste.

Memory_Leaks_Lazarus_RDW_REFACTOR.zip

tatianepeixoto avatar Aug 25 '22 20:08 tatianepeixoto

Corrigido no commit: https://github.com/OpenSourceCommunityBrasil/REST-DataWare/commit/aac291b06fde8f0fa56de0e6a9307679b95bbb11

mobius1qwe avatar Sep 16 '22 22:09 mobius1qwe