diff options
| -rw-r--r-- | libstdc++-v3/ChangeLog | 5 | ||||
| -rw-r--r-- | 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 <pcarlini@suse.de> + + * include/tr1/boost_shared_ptr.h (_Sp_counted_base::release, + weak_release): Protect barriers with __GTHREADS. + +2005-11-10 Paolo Carlini <pcarlini@suse.de> Peter Dimov <pdimov@mmltd.net> * 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<typename _Tp> class weak_ptr; @@ -850,7 +852,6 @@ template<typename _Tp> #endif } // XXX MT - long use_count() const // never throws { return _M_refcount.use_count(); } |
