memory leaks in dblib/tds

Geoff Winkless geoff at farmline.com
Tue Nov 9 09:52:30 EST 1999


Firstly, thanks everyone who's put any work into freetds, it's really
helped me out...

now my problem.

I started out with a large authentication routine which works flawlessly, 
however I noticed that after a day running the program memory use had grown 
to around 8MB.

I broke down the program...

If I create a simple routine which does:

  dbcmd(dbproc, "select top 1 fID from <<SOMETHING>>");
  dbsqlexec(dbproc);
  return_code = dbresults(dbproc);
  if (return_code == NO_MORE_RESULTS) {
    sprintf(mystr, "NORESULT\n");
    return -1;
  }

  while (return_code != NO_MORE_RESULTS) {
    if (return_code == SUCCEED) {
      while (dbnextrow(dbproc)  != NO_MORE_ROWS);
    }
    return_code = dbresults(dbproc);
  }
  return 0;
}                                     

and continuously call that function within a while(1==1) loop, calling with 
a dbproc that I set up outside the function, I get a large memory leak 
problem -- the program starts at 840k and increases by 16kB every 1000 
results.

If I increase the number of columns I return the leak increases in speed as 
you would expect.

Should I be "free"ing some objects in between calls to dbsqlexec()? Or is 
there a bug somewhere?

I started out with 0.46 but have just tried the above code snippet on a 
different machine which I put .47 on and achieved the same results.

Thanks for any help/suggestions

Geoff



More information about the FreeTDS mailing list