about summary refs log tree commit diff
path: root/malloc/malloc.c
diff options
context:
space:
mode:
authorZack Weinberg <zackw@panix.com>2018-02-10 16:24:17 -0500
committerZack Weinberg <zackw@panix.com>2018-02-10 16:24:17 -0500
commit402ecba487804e9196769f39a8d157847d3b3104 (patch)
treea3520f093faa45dcb88e6ed8a97d9c5ad2f98e64 /malloc/malloc.c
parent4f5b921eb9b775aa3549a9bcd684c3013132f04b (diff)
downloadglibc-402ecba487804e9196769f39a8d157847d3b3104.tar.gz
glibc-402ecba487804e9196769f39a8d157847d3b3104.tar.xz
glibc-402ecba487804e9196769f39a8d157847d3b3104.zip
[BZ #22830] malloc_stats: restore cancellation for stderr correctly.
malloc_stats means to disable cancellation for writes to stderr while
it runs, but it restores stderr->_flags2 with |= instead of =, so what
it actually does is disable cancellation on stderr permanently.

	[BZ #22830]
	* malloc/malloc.c (__malloc_stats): Restore stderr->_flags2
        correctly.
        * malloc/tst-malloc-stats-cancellation.c: New test case.
        * malloc/Makefile: Add new test case.
Diffstat (limited to 'malloc/malloc.c')
-rw-r--r--malloc/malloc.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/malloc/malloc.c b/malloc/malloc.c
index f8e7250f70..3224b3a899 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -5009,7 +5009,7 @@ __malloc_stats (void)
   fprintf (stderr, "max mmap regions = %10u\n", (unsigned int) mp_.max_n_mmaps);
   fprintf (stderr, "max mmap bytes   = %10lu\n",
            (unsigned long) mp_.max_mmapped_mem);
-  ((_IO_FILE *) stderr)->_flags2 |= old_flags2;
+  ((_IO_FILE *) stderr)->_flags2 = old_flags2;
   _IO_funlockfile (stderr);
 }