From patchwork Thu Apr 19 08:37:02 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: fix libstdc++/52604 : __freelist::~__freelist re-initializes _M_thread_freelist Date: Wed, 18 Apr 2012 22:37:02 -0000 From: Laurent Alfonsi X-Patchwork-Id: 153686 Message-Id: <4F8FCEAE.8040709@st.com> To: Cc: All, The attached patch re-initializes _M_thread_freelist in __freelist::~__freelist just after calling ::operator delete(static_cast(_M_thread_freelist_array)); It avoids valgrind errors in __pool::_M_get_thread_id() later invoked. Testcases : ext/mt_allocator/deallocate_global_thread-1.cc ext/mt_allocator/deallocate_global_thread-3.cc Tested on x86_64-linux (make check, make check-performance). Laurent PS : Already approved by Paolo Carlini under the 52604 discussions. Index: src/c++98/mt_allocator.cc =================================================================== --- src/c++98/mt_allocator.cc (revision 186374) +++ src/c++98/mt_allocator.cc (working copy) @@ -48,6 +48,7 @@ { __gthread_key_delete(_M_key); ::operator delete(static_cast(_M_thread_freelist_array)); + _M_thread_freelist = 0; } } };