diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 19d2d49b041a..0ca7b0cfa490 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +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 diff --git a/libstdc++-v3/include/tr1/boost_shared_ptr.h b/libstdc++-v3/include/tr1/boost_shared_ptr.h index 3eb94fd980b4..2c3e27ca5377 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(); }