diff options
author | Paul Pluzhnikov <ppluzhnikov@google.com> | 2015-03-08 09:46:53 -0700 |
---|---|---|
committer | Paul Pluzhnikov <ppluzhnikov@google.com> | 2015-03-08 09:46:53 -0700 |
commit | 18d26750dd8fd328a78cf639fd0ec2494680a2a4 (patch) | |
tree | 5b1fe6c27fa51362021ea15d2c3fa2493eaf8a81 | |
parent | 9f95dc5d227c5a155d39208dfd15aacaa509b59b (diff) | |
download | glibc-18d26750dd8fd328a78cf639fd0ec2494680a2a4.tar.gz |
Cleanup: in preparation for fixing BZ #16734, fix memory leaks exposed by
switching fopen()ed streams from mmap to malloc.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | libio/genops.c | 12 |
2 files changed, 12 insertions, 7 deletions
@@ -1,3 +1,10 @@ +2015-03-08 Paul Pluzhnikov <ppluzhnikov@google.com> + + [BZ #16734] + * libio/genops.c (_IO_unbuffer_all): Renamed from _IO_unbuffer_write. + Cleanup read-only streams as well. + (_IO_cleanup): Call _IO_unbuffer_all instead of _IO_unbuffer_write. + 2015-03-08 Samuel Thibault <samuel.thibault@ens-lyon.org> * sysdeps/mach/hurd/bits/libc-lock.h [_LIBC]: Include 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; } |