From 18d26750dd8fd328a78cf639fd0ec2494680a2a4 Mon Sep 17 00:00:00 2001 From: Paul Pluzhnikov Date: Sun, 8 Mar 2015 09:46:53 -0700 Subject: Cleanup: in preparation for fixing BZ #16734, fix memory leaks exposed by switching fopen()ed streams from mmap to malloc. --- libio/genops.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'libio/genops.c') diff --git a/libio/genops.c b/libio/genops.c index 6612997b45..0f5e80064e 100644 --- a/libio/genops.c +++ b/libio/genops.c @@ -935,23 +935,21 @@ weak_alias (_IO_flush_all_linebuffered, _flushlbf) the atexit routine, just like _IO_cleanup. The problem is we do not know whether the freeres code is called first or _IO_cleanup. if the former is the case, we set the DEALLOC_BUFFER variable to - true and _IO_unbuffer_write will take care of the rest. If - _IO_unbuffer_write is called first we add the streams to a list + true and _IO_unbuffer_all will take care of the rest. If + _IO_unbuffer_all is called first we add the streams to a list which the freeres function later can walk through. */ -static void _IO_unbuffer_write (void); +static void _IO_unbuffer_all (void); static bool dealloc_buffers; static _IO_FILE *freeres_list; static void -_IO_unbuffer_write (void) +_IO_unbuffer_all (void) { struct _IO_FILE *fp; for (fp = (_IO_FILE *) _IO_list_all; fp; fp = fp->_chain) { if (! (fp->_flags & _IO_UNBUFFERED) - && (! (fp->_flags & _IO_NO_WRITES) - || (fp->_flags & _IO_IS_APPENDING)) /* Iff stream is un-orientated, it wasn't used. */ && fp->_mode != 0) { @@ -1019,7 +1017,7 @@ _IO_cleanup (void) The following will make the standard streambufs be unbuffered, which forces any output from late destructors to be written out. */ - _IO_unbuffer_write (); + _IO_unbuffer_all (); return result; } -- cgit 1.4.1