1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-01 10:06:57 +03:00

Cleanup: in preparation for fixing BZ #16734, fix memory leaks exposed by

switching fopen()ed streams from mmap to malloc.
This commit is contained in:
Paul Pluzhnikov
2015-03-08 09:46:53 -07:00
parent 9f95dc5d22
commit 18d26750dd
2 changed files with 12 additions and 7 deletions

View File

@ -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> 2015-03-08 Samuel Thibault <samuel.thibault@ens-lyon.org>
* sysdeps/mach/hurd/bits/libc-lock.h [_LIBC]: Include * sysdeps/mach/hurd/bits/libc-lock.h [_LIBC]: Include

View File

@ -935,23 +935,21 @@ weak_alias (_IO_flush_all_linebuffered, _flushlbf)
the atexit routine, just like _IO_cleanup. The problem is we do the atexit routine, just like _IO_cleanup. The problem is we do
not know whether the freeres code is called first or _IO_cleanup. 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 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 true and _IO_unbuffer_all will take care of the rest. If
_IO_unbuffer_write is called first we add the streams to a list _IO_unbuffer_all is called first we add the streams to a list
which the freeres function later can walk through. */ 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 bool dealloc_buffers;
static _IO_FILE *freeres_list; static _IO_FILE *freeres_list;
static void static void
_IO_unbuffer_write (void) _IO_unbuffer_all (void)
{ {
struct _IO_FILE *fp; struct _IO_FILE *fp;
for (fp = (_IO_FILE *) _IO_list_all; fp; fp = fp->_chain) for (fp = (_IO_FILE *) _IO_list_all; fp; fp = fp->_chain)
{ {
if (! (fp->_flags & _IO_UNBUFFERED) if (! (fp->_flags & _IO_UNBUFFERED)
&& (! (fp->_flags & _IO_NO_WRITES)
|| (fp->_flags & _IO_IS_APPENDING))
/* Iff stream is un-orientated, it wasn't used. */ /* Iff stream is un-orientated, it wasn't used. */
&& fp->_mode != 0) && fp->_mode != 0)
{ {
@ -1019,7 +1017,7 @@ _IO_cleanup (void)
The following will make the standard streambufs be unbuffered, The following will make the standard streambufs be unbuffered,
which forces any output from late destructors to be written out. */ which forces any output from late destructors to be written out. */
_IO_unbuffer_write (); _IO_unbuffer_all ();
return result; return result;
} }