]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[2198] Add a block argument to Mutex::Locker's constructor
authorMukund Sivaraman <muks@isc.org>
Sun, 21 Oct 2012 23:26:07 +0000 (04:56 +0530)
committerMukund Sivaraman <muks@isc.org>
Sun, 21 Oct 2012 23:44:37 +0000 (05:14 +0530)
src/lib/util/threads/sync.h

index b6cdc8f582f78b205518496bfb5afb4b4fe97dfd..cdbd5c1b4fac15cd516594c1972ef0da8fa05c2f 100644 (file)
@@ -89,15 +89,24 @@ public:
 
         /// \brief Constructor.
         ///
-        /// Locks the mutex. May block for extended period of time.
+        /// Locks the mutex. May block for extended period of time if
+        /// \c block is true.
         ///
         /// \throw isc::InvalidOperation when OS reports error. This usually
         ///     means an attempt to use the mutex in a wrong way (locking
         ///     a mutex second time from the same thread, for example).
-        Locker(Mutex& mutex) :
+        /// \throw AlreadyLocked if \c block is false and the mutex is
+        ///     already locked.
+        Locker(Mutex& mutex, bool block = true) :
             mutex_(mutex)
         {
-            mutex.lock();
+            if (block) {
+                mutex.lock();
+            } else {
+                if (!mutex.tryLock()) {
+                    isc_throw(AlreadyLocked, "The mutex is already locked");
+                }
+            }
         }
 
         /// \brief Destructor.