memory leaks in dblib/tds

Bob Kline bkline at rksystems.com
Tue Nov 9 09:44:08 EST 1999


On Tue, 9 Nov 1999, Geoff Winkless wrote:

> 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.
> 

What happens if you throw in a call to dbcancel()?

-- 
Bob Kline
mailto:bkline at rksystems.com
http://www.rksystems.com




More information about the FreeTDS mailing list