From a15024e630fe34f6ceb12151831664b028b26b09 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Thu, 10 Nov 2005 12:03:50 +0000 Subject: [PATCH] boost_shared_ptr.h (_Sp_counted_base::release, [...]): Protect barriers with __GTHREADS. 2005-11-10 Paolo Carlini * include/tr1/boost_shared_ptr.h (_Sp_counted_base::release, weak_release): Protect barriers with __GTHREADS. From-SVN: r106733 --- libstdc++-v3/ChangeLog | 5 +++++ libstdc++-v3/include/tr1/boost_shared_ptr.h | 9 +++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 19d2d49..0ca7b0c 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,4 +1,9 @@ 2005-11-10 Paolo Carlini + + * include/tr1/boost_shared_ptr.h (_Sp_counted_base::release, + weak_release): Protect barriers with __GTHREADS. + +2005-11-10 Paolo Carlini Peter Dimov * include/tr1/boost_shared_ptr.h (_Sp_counted_base::release): diff --git a/libstdc++-v3/include/tr1/boost_shared_ptr.h b/libstdc++-v3/include/tr1/boost_shared_ptr.h index 3eb94fd..2c3e27c 100644 --- a/libstdc++-v3/include/tr1/boost_shared_ptr.h +++ b/libstdc++-v3/include/tr1/boost_shared_ptr.h @@ -151,10 +151,10 @@ public: if (__gnu_cxx::__exchange_and_add(&_M_use_count, -1) == 1) { dispose(); - +#ifdef __GTHREADS _GLIBCXX_READ_MEM_BARRIER; _GLIBCXX_WRITE_MEM_BARRIER; - +#endif if (__gnu_cxx::__exchange_and_add(&_M_weak_count, -1) == 1) destroy(); } @@ -171,8 +171,10 @@ public: { if (__gnu_cxx::__exchange_and_add(&_M_weak_count, -1) == 1) { +#ifdef __GTHREADS _GLIBCXX_READ_MEM_BARRIER; _GLIBCXX_WRITE_MEM_BARRIER; +#endif destroy(); } } @@ -326,7 +328,6 @@ public: { return _M_pi ? _M_pi->get_deleter(__ti) : 0; } }; - class weak_count { private: @@ -418,6 +419,7 @@ shared_count::shared_count(const weak_count& __r) __throw_bad_weak_ptr(); } + // fwd decls template class weak_ptr; @@ -850,7 +852,6 @@ template #endif } // XXX MT - long use_count() const // never throws { return _M_refcount.use_count(); } -- 2.7.4