diff options
author | Florian Weimer <fweimer@redhat.com> | 2015-12-16 12:39:48 +0100 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2015-12-16 12:39:48 +0100 |
commit | 3da825ce483903e3a881a016113b3e59fd4041de (patch) | |
tree | 092a1973785289ec3bd6bb2eb9c40064608d33b6 /malloc/Makefile | |
parent | f1aceee39289f97a420126c58007eba77fb2dd30 (diff) | |
download | glibc-3da825ce483903e3a881a016113b3e59fd4041de.zip glibc-3da825ce483903e3a881a016113b3e59fd4041de.tar.gz glibc-3da825ce483903e3a881a016113b3e59fd4041de.tar.bz2 |
malloc: Fix attached thread reference count handling [BZ #19243]
reused_arena can increase the attached thread count of arenas on the
free list. This means that the assertion that the reference count is
zero is incorrect. In this case, the reference count initialization
is incorrect as well and could cause arenas to be put on the free
list too early (while they still have attached threads).
* malloc/arena.c (get_free_list): Remove assert and adjust
reference count handling. Add comment about reused_arena
interaction.
(reused_arena): Add comments abount get_free_list interaction.
* malloc/tst-malloc-thread-exit.c: New file.
* malloc/Makefile (tests): Add tst-malloc-thread-exit.
(tst-malloc-thread-exit): Link against libpthread.
Diffstat (limited to 'malloc/Makefile')
-rw-r--r-- | malloc/Makefile | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/malloc/Makefile b/malloc/Makefile index 67ed293..aa0579c 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -28,7 +28,7 @@ tests := mallocbug tst-malloc tst-valloc tst-calloc tst-obstack \ tst-mallocstate tst-mcheck tst-mallocfork tst-trim1 \ tst-malloc-usable tst-realloc tst-posix_memalign \ tst-pvalloc tst-memalign tst-mallopt tst-scratch_buffer \ - tst-malloc-backtrace + tst-malloc-backtrace tst-malloc-thread-exit test-srcs = tst-mtrace routines = malloc morecore mcheck mtrace obstack \ @@ -47,6 +47,8 @@ libmemusage-inhibit-o = $(filter-out .os,$(object-suffixes)) $(objpfx)tst-malloc-backtrace: $(common-objpfx)nptl/libpthread.so \ $(common-objpfx)nptl/libpthread_nonshared.a +$(objpfx)tst-malloc-thread-exit: $(common-objpfx)nptl/libpthread.so \ + $(common-objpfx)nptl/libpthread_nonshared.a # These should be removed by `make clean'. extra-objs = mcheck-init.o libmcheck.a |