diff options
author | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-10-01 20:36:28 +0000 |
---|---|---|
committer | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-10-01 20:36:28 +0000 |
commit | 3aab1f8467010bcb81081b55eef191452102ffa6 (patch) | |
tree | 3da9c4bf9a013ccf556db9adb5698aa565928e96 /io.c | |
parent | cfc565796a8a2af790e473e00b62aef1ac32a03c (diff) | |
download | ruby-3aab1f8467010bcb81081b55eef191452102ffa6.tar.gz |
io.c (fptr_finalize): free memory before GC sweep
This releases memory on explict calls to rb_io_close,
reducing pressure on the GC.
Final massif snapshot shows reduced heap usage after RubyGems load
(valgrind --tool=massif ./ruby -e exit)
before:
mem_heap_B=4821992
mem_heap_extra_B=1302952
after:
mem_heap_B=4791056
mem_heap_extra_B=1192440
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47758 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 6 |
1 files changed, 6 insertions, 0 deletions
@@ -4251,6 +4251,9 @@ maygvl_fclose(FILE *file, int keepgvl) return (int)(intptr_t)rb_thread_call_without_gvl(nogvl_fclose, file, RUBY_UBF_IO, 0); } +static void free_io_buffer(rb_io_buffer_t *buf); +static void clear_codeconv(rb_io_t *fptr); + static void fptr_finalize(rb_io_t *fptr, int noraise) { @@ -4312,6 +4315,9 @@ fptr_finalize(rb_io_t *fptr, int noraise) rb_exc_raise(err); } } + free_io_buffer(&fptr->rbuf); + free_io_buffer(&fptr->wbuf); + clear_codeconv(fptr); } static void |