Issue #11626 has been updated by Nobuyoshi Nakada.

Description updated
Status changed from Open to Rejected

Nothing related to ruby, you just collapse the heap by repeatedly appending strings to the same area.
It will depend on the platform, if `malloc` returns the same pointer as just `free`d.

----------------------------------------
Bug #11626: fprintf in c extension keep adding memory usage
https://bugs.ruby-lang.org/issues/11626#change-54612

* Author: GC Yang
* Status: Rejected
* Priority: Normal
* Assignee: 
* ruby -v: 1.9.3p550
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
`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` 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})}`, memory also looks normal. Leaking somewhere???? 



-- 
https://bugs.ruby-lang.org/