From 2494f3fc7a6dcaa990d2801ba7f91ffa3728b136 Mon Sep 17 00:00:00 2001 From: "Vicente J. Botet Escriba" Date: Sun, 24 Apr 2016 01:05:45 +0200 Subject: [PATCH] Apply manualy fixes on develop concerning memory leak os tss and scoped_thread move assignement. --- include/boost/thread/scoped_thread.hpp | 3 +++ src/pthread/once.cpp | 3 +++ src/pthread/thread.cpp | 3 +++ 3 files changed, 9 insertions(+) diff --git a/include/boost/thread/scoped_thread.hpp b/include/boost/thread/scoped_thread.hpp index ae0d1efc..c2da9197 100644 --- a/include/boost/thread/scoped_thread.hpp +++ b/include/boost/thread/scoped_thread.hpp @@ -197,6 +197,9 @@ namespace boost */ scoped_thread& operator=(BOOST_RV_REF(scoped_thread) x) { + CallableThread on_destructor; + + on_destructor(t_); t_ = boost::move(BOOST_THREAD_RV(x).t_); return *this; } diff --git a/src/pthread/once.cpp b/src/pthread/once.cpp index 5deb4aed..d73acb70 100644 --- a/src/pthread/once.cpp +++ b/src/pthread/once.cpp @@ -53,6 +53,9 @@ namespace boost { if(memcmp(&epoch_tss_key_flag, &pthread_once_init_value, sizeof(pthread_once_t))) { + void* data = (void*)pthread_getspecific(epoch_tss_key); + if (data) + delete_epoch_tss_data(data); pthread_key_delete(epoch_tss_key); } } diff --git a/src/pthread/thread.cpp b/src/pthread/thread.cpp index 7fd61b12..989cd064 100644 --- a/src/pthread/thread.cpp +++ b/src/pthread/thread.cpp @@ -126,6 +126,9 @@ namespace boost const boost::once_flag uninitialized = BOOST_ONCE_INIT; if (memcmp(¤t_thread_tls_init_flag, &uninitialized, sizeof(boost::once_flag))) { + void* data = pthread_getspecific(current_thread_tls_key); + if (data) + tls_destructor(data); pthread_key_delete(current_thread_tls_key); } }