Excessive use of memory when doing multiple connection attach/detach calls.
---------------------------------------------------------------------------

                 Key: CORE-3702
                 URL: http://tracker.firebirdsql.org/browse/CORE-3702
             Project: Firebird Core
          Issue Type: Bug
          Components: API / Client Library
    Affects Versions: 2.5.1
         Environment: Win7 64bit (using 32bit client)
            Reporter: Jason Wharton
            Priority: Critical


Here is a Delphi sample app that will reproduce this problem.

Start a fresh new application with a main form.

Put a private variable as follows:

  MyCount: integer;

Put a button on the form named btProb.

Add this in the uses clause:

  IB_Header, IB_Session;

Assign an OnClick handler for the btProb button as follows:

procedure TfrmMemLeak.btProbClick(Sender: TObject);
var
  dbh: isc_db_handle;
  rb: RawByteString;
  dpb: array[0..19] of byte;
  errcode: isc_status;
  status: status_vector;
begin
  if MyCount = 0 then
    MyCount := 5000
  else
    MyCount := 0;
//  rb := 'localhost:c:\cps-data\ibdb\test_ib_XE.fdb';
  rb := 'localhost:c:\cps-data\ibdb\test.fdb';
  dpb[ 0] :=   1; //isc_dpb_version1
  dpb[ 1] :=  28; //isc_dpb_user_name
  dpb[ 2] :=   6; //6 bytes long
  dpb[ 3] :=  83; //S
  dpb[ 4] :=  89; //Y
  dpb[ 5] :=  83; //S
  dpb[ 6] :=  68; //D
  dpb[ 7] :=  66; //B
  dpb[ 8] :=  65; //A
  dpb[ 9] :=  29; //isc_dpb_password
  dpb[10] :=   9; //9 bytes long
  dpb[11] := 109; //m
  dpb[12] :=  97; //a
  dpb[13] := 115; //s
  dpb[14] := 116; //t
  dpb[15] := 101; //e
  dpb[16] := 114; //r
  dpb[17] := 107; //k
  dpb[18] := 101; //e
  dpb[19] := 121; //y
  dbh := nil;
  if MyCount > 0 then
  begin
    try
      if not Assigned( isc_attach_database ) then
        RevertToOriginalHooks;
      btProb.Caption := 'Prob...';
      while MyCount > 0  do
      begin
        errcode := isc_attach_database( @status,
                                        Length(rb),
                                        PByte(rb),
                                        @dbh,
                                        SizeOf( dpb ),
                                        @dpb );
        if errcode = 0 then
          errcode := isc_detach_database( @status, @dbh );
        if errcode<> 0 then
          raise Exception.Create( 'Errcode: ' + IntToStr(errcode) );
        Dec( MyCount );
        Application.ProcessMessages;
      end;
    finally
      MyCount := 0;
      btProb.Caption := 'Prob'
    end;
  end;
end;

Modify the connect path, username and password in the code above to match a 
valid database on your machine and your server's sysdba account.

Then compile and run but don't click the button just yet.

Run Win7's "Resource Monitor" (search on start menu should find it) and then go 
to where it will monitor memory on a per-process basis. Look for the name of 
your program in the list of processes and select it so you can follow it. You 
will be watching the Physical Memory column for the undesirable growth.

Click on the button to run the loop of attaching and detaching from your 
database.

You should notice that the memory used by your program is increasing steadily. 
Not at a super fast rate but at a rate fast enough that it makes Firebird 
unusable for a server process that must have an uptime of many days and weeks.

Jason


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://tracker.firebirdsql.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

------------------------------------------------------------------------------
Write once. Port to many.
Get the SDK and tools to simplify cross-platform app development. Create 
new or port existing apps to sell to consumers worldwide. Explore the 
Intel AppUpSM program developer opportunity. appdeveloper.intel.com/join
http://p.sf.net/sfu/intel-appdev
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to