]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/interprocess/sync/spin/mutex.hpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / boost / interprocess / sync / spin / mutex.hpp
index 7663673433aef624580a430822b2335050e946ca..c2a6f42ada0017400f506f64128a00097c83936c 100644 (file)
@@ -45,7 +45,7 @@ class spin_mutex
    bool try_lock();
    bool timed_lock(const boost::posix_time::ptime &abs_time);
    void unlock();
-   void take_ownership(){};
+   void take_ownership(){}
    private:
    volatile boost::uint32_t m_s;
 };
@@ -64,7 +64,21 @@ inline spin_mutex::~spin_mutex()
 }
 
 inline void spin_mutex::lock(void)
-{  return ipcdetail::try_based_lock(*this); }
+{
+#ifdef BOOST_INTERPROCESS_ENABLE_TIMEOUT_WHEN_LOCKING
+       boost::posix_time::ptime wait_time
+               = microsec_clock::universal_time()
+               + boost::posix_time::milliseconds(BOOST_INTERPROCESS_TIMEOUT_WHEN_LOCKING_DURATION_MS);
+       if (!timed_lock(wait_time))
+       {
+               throw interprocess_exception(timeout_when_locking_error
+                       , "Interprocess mutex timeout when locking. Possible deadlock: "
+                       "owner died without unlocking?");
+       }
+#else
+   return ipcdetail::try_based_lock(*this);
+#endif
+}
 
 inline bool spin_mutex::try_lock(void)
 {