From 405c4abb9f382c935b04c48f22b51b3f3970f71a Mon Sep 17 00:00:00 2001 From: normal Date: Thu, 25 Sep 2014 10:40:37 +0000 Subject: io.c: common function to free IO buffers This also allows easier tracking of freed memory for systems without malloc_usable_size, and also makes future changes to freeing buffer memory easier-to-implement. * io.c (free_io_buffer): new function for a common pattern (clear_readconv): use free_io_buffer (rb_io_fptr_finalize): ditto git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47712 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- io.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'io.c') diff --git a/io.c b/io.c index 5909a0be50..876ae675a4 100644 --- a/io.c +++ b/io.c @@ -4325,6 +4325,15 @@ rb_io_fptr_cleanup(rb_io_t *fptr, int noraise) } } +static void +free_io_buffer(rb_io_buffer_t *buf) +{ + if (buf->ptr) { + ruby_sized_xfree(buf->ptr, (size_t)buf->capa); + buf->ptr = NULL; + } +} + static void clear_readconv(rb_io_t *fptr) { @@ -4332,10 +4341,7 @@ clear_readconv(rb_io_t *fptr) rb_econv_close(fptr->readconv); fptr->readconv = NULL; } - if (fptr->cbuf.ptr) { - free(fptr->cbuf.ptr); - fptr->cbuf.ptr = NULL; - } + free_io_buffer(&fptr->cbuf); } static void @@ -4363,14 +4369,8 @@ rb_io_fptr_finalize(rb_io_t *fptr) if (0 <= fptr->fd) rb_io_fptr_cleanup(fptr, TRUE); fptr->write_lock = 0; - if (fptr->rbuf.ptr) { - free(fptr->rbuf.ptr); - fptr->rbuf.ptr = 0; - } - if (fptr->wbuf.ptr) { - free(fptr->wbuf.ptr); - fptr->wbuf.ptr = 0; - } + free_io_buffer(&fptr->rbuf); + free_io_buffer(&fptr->wbuf); clear_codeconv(fptr); free(fptr); return 1; -- cgit v1.2.3