Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r71488 - in sandbox/mm_ptr: boost boost/detail libs/smart_ptr/example
From: phil_at_[hidden]
Date: 2011-04-25 15:08:08


Author: pbouchard
Date: 2011-04-25 15:08:07 EDT (Mon, 25 Apr 2011)
New Revision: 71488
URL: http://svn.boost.org/trac/boost/changeset/71488

Log:
* Added multithread support
Text files modified:
   sandbox/mm_ptr/boost/detail/mm_base.hpp | 5 +----
   sandbox/mm_ptr/boost/mm_ptr.hpp | 11 +++++++++++
   sandbox/mm_ptr/libs/smart_ptr/example/Makefile | 2 +-
   3 files changed, 13 insertions(+), 5 deletions(-)

Modified: sandbox/mm_ptr/boost/detail/mm_base.hpp
==============================================================================
--- sandbox/mm_ptr/boost/detail/mm_base.hpp (original)
+++ sandbox/mm_ptr/boost/detail/mm_base.hpp 2011-04-25 15:08:07 EDT (Mon, 25 Apr 2011)
@@ -26,9 +26,6 @@
 #include <stack>
 #include <limits>
 
-// Bypassing linkage by default
-#define BOOST_SH_DISABLE_THREADS
-
 #include <boost/thread.hpp>
 #include <boost/thread/tss.hpp>
 #include <boost/pool/pool.hpp>
@@ -72,7 +69,7 @@
 {
         typedef std::list< numeric::interval<long>, fast_pool_allocator< numeric::interval<long> > > pool_lii; /**< Syntax helper. */
 
-#ifndef BOOST_SH_DISABLE_THREADS
+#ifndef BOOST_DISABLE_THREADS
     thread_specific_ptr<pool_lii> plii_; /**< Thread specific list of memory boundaries. */
 #else
     std::auto_ptr<pool_lii> plii_; /**< List of memory boundaries. */

Modified: sandbox/mm_ptr/boost/mm_ptr.hpp
==============================================================================
--- sandbox/mm_ptr/boost/mm_ptr.hpp (original)
+++ sandbox/mm_ptr/boost/mm_ptr.hpp 2011-04-25 15:08:07 EDT (Mon, 25 Apr 2011)
@@ -33,6 +33,7 @@
 #include <boost/pool/pool_alloc.hpp>
 #include <boost/type_traits/add_pointer.hpp>
 #include <boost/smart_ptr/detail/atomic_count.hpp>
+#include <boost/thread/thread.hpp>
 
 #include <boost/detail/intrusive_list.hpp>
 #include <boost/detail/intrusive_stack.hpp>
@@ -69,6 +70,10 @@
     intrusive_list includes_; /**< List of all sets of an union. */
     intrusive_list elements_; /**< List of all pointee objects belonging to a @c mm_header . */
 
+#ifndef BOOST_DISABLE_THREADS
+ mutex mutex_;
+#endif
+
     static fast_pool_allocator<mm_header> pool_; /**< Pool where all sets are allocated. */
 
 public:
@@ -98,6 +103,9 @@
 
         if (-- p->count_ == 0)
         {
+#ifndef BOOST_DISABLE_THREADS
+ mutex::scoped_lock scoped_lock(mutex_);
+#endif
                         p->destroy_ = true;
             for (intrusive_list::iterator<mm_base, & mm_base::mm_tag_> i; i = p->elements_.begin(), i != p->elements_.end(); )
                 delete &* i;
@@ -143,6 +151,9 @@
     {
         if (redir_ != p->redir())
         {
+#ifndef BOOST_DISABLE_THREADS
+ mutex::scoped_lock scoped_lock(mutex_);
+#endif
             redir_ = p->redir();
             redir_->includes_.merge(includes_);
             redir_->elements_.merge(elements_);

Modified: sandbox/mm_ptr/libs/smart_ptr/example/Makefile
==============================================================================
--- sandbox/mm_ptr/libs/smart_ptr/example/Makefile (original)
+++ sandbox/mm_ptr/libs/smart_ptr/example/Makefile 2011-04-25 15:08:07 EDT (Mon, 25 Apr 2011)
@@ -2,7 +2,7 @@
 CXXFLAGS := -ggdb3
 INCPATH := -I../../.. -I../../../../../include
 LINK := g++
-LFLAGS := -L../../../../../lib
+LFLAGS := -L../../../../../lib -lboost_thread
 RM := rm
 HEADERS := $(wildcard *.h)
 SOURCES := $(wildcard *.cpp)


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk