Project

General

Profile

Bug #11626

Updated by nobu (Nobuyoshi Nakada) over 8 years ago

`fprintf` fprintf will keep adding memory usage without releasing it.  

 I was doing it in rails console, not sure if it makes any different. The code like this: 

 ~~~c 
 VALUE leak (VALUE self, VALUE in) { 
   char *str = StringValuePtr(in); 
   char *pstr; 
   pstr = malloc (10240); 
   strcat(pstr,str); 
   fprintf (stdout, pstr); 
   self = rb_str_new_cstr(pstr); 
   free (pstr); 
   return self; 
 } 

 void Init_extension(){ 
   rb_define_global_function("leak", leak, 1); 
 } 
 ~~~ 
 ~~~ruby 
 

 100000000.times{leak("lots of garbage")} 
 ~~~ 

 without the `fprintf` fprintf line the memory usage is normal, adding that line just keep adding memory, kill the console process will release the memory.  

 If I do `100000.times{Process.wait(fork{ stuff})}`, 100000.times{Process.wait(fork{ stuff})}, memory also looks normal. Leaking somewhere????

Back