$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: pdimov_at_[hidden]
Date: 2008-04-09 13:49:21
Author: pdimov
Date: 2008-04-09 13:49:20 EDT (Wed, 09 Apr 2008)
New Revision: 44132
URL: http://svn.boost.org/trac/boost/changeset/44132
Log:
Proper try_lock semantics.
Text files modified: 
   trunk/boost/detail/spinlock_nt.hpp |    28 +++++++++++++++++++++++++---            
   1 files changed, 25 insertions(+), 3 deletions(-)
Modified: trunk/boost/detail/spinlock_nt.hpp
==============================================================================
--- trunk/boost/detail/spinlock_nt.hpp	(original)
+++ trunk/boost/detail/spinlock_nt.hpp	2008-04-09 13:49:20 EDT (Wed, 09 Apr 2008)
@@ -15,6 +15,8 @@
 //  http://www.boost.org/LICENSE_1_0.txt)
 //
 
+#include <boost/assert.hpp>
+
 namespace boost
 {
 
@@ -25,17 +27,33 @@
 {
 public:
 
+    bool locked_;
+
+public:
+
     inline bool try_lock()
     {
-        return true;
+        if( locked_ )
+        {
+            return false;
+        }
+        else
+        {
+            locked_ = true;
+            return true;
+        }
     }
 
     inline void lock()
     {
+        BOOST_ASSERT( !locked_ );
+        locked_ = true;
     }
 
     inline void unlock()
     {
+        BOOST_ASSERT( locked_ );
+        locked_ = false;
     }
 
 public:
@@ -44,17 +62,21 @@
     {
     private:
 
+        spinlock & sp_;
+
         scoped_lock( scoped_lock const & );
         scoped_lock & operator=( scoped_lock const & );
 
     public:
 
-        explicit scoped_lock( spinlock & /*sp*/ )
+        explicit scoped_lock( spinlock & sp ): sp_( sp )
         {
+            sp.lock();
         }
 
         ~scoped_lock()
         {
+            sp_.unlock();
         }
     };
 };
@@ -62,6 +84,6 @@
 } // namespace detail
 } // namespace boost
 
-#define BOOST_DETAIL_SPINLOCK_INIT {}
+#define BOOST_DETAIL_SPINLOCK_INIT { false }
 
 #endif // #ifndef BOOST_DETAIL_SPINLOCK_NT_HPP_INCLUDED