]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/interprocess/sync/detail/common_algorithms.hpp
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / boost / boost / interprocess / sync / detail / common_algorithms.hpp
index 1a72d686b4b4f0dd843e3e290547230c6bba75d1..87739b81213cf7cd3b1a0eb108621ac9e65d051a 100644 (file)
@@ -72,6 +72,49 @@ void try_based_lock(MutexType &m)
    }
 }
 
+template<class MutexType>
+void timed_based_lock(MutexType &m, unsigned const uCheckPeriodSec)
+{
+   const boost::posix_time::time_duration dur(0, 0, uCheckPeriodSec);
+   boost::posix_time::ptime deadline(microsec_clock::universal_time()+dur);
+   if(!m.timed_lock(deadline)){
+      spin_wait swait;
+      do{
+         deadline = microsec_clock::universal_time()+dur;
+         if(m.timed_lock(deadline)){
+            break;
+         }
+         else{
+            swait.yield();
+         }
+      }
+      while(1);
+   }
+}
+
+template<class MutexType>
+void timed_based_timed_lock(MutexType &m, const boost::posix_time::ptime &abs_time, unsigned const uCheckPeriodSec)
+{
+   const boost::posix_time::time_duration dur(0, 0, uCheckPeriodSec);
+   boost::posix_time::ptime deadline(microsec_clock::universal_time()+dur);
+   if(abs_time <= deadline){
+      m.timed_lock(abs_time);
+   }
+   else if(!m.timed_lock(deadline)){
+      spin_wait swait;
+      do{
+         deadline = microsec_clock::universal_time()+dur;
+         if(m.timed_lock(deadline)){
+            break;
+         }
+         else{
+            swait.yield();
+         }
+      }
+      while(1);
+   }
+}
+
 }  //namespace ipcdetail
 }  //namespace interprocess
 }  //namespace boost