]> git.ipfire.org Git - thirdparty/pdns.git/blobdiff - pdns/lock.hh
auth: switch circleci mssql image
[thirdparty/pdns.git] / pdns / lock.hh
index 4a0c4a1161e789d139ecb820cdd405ace1489d6c..3529ee3ae302bf699ae2ccb659afaaba8b667a21 100644 (file)
@@ -40,8 +40,12 @@ public:
   {
     if(g_singleThreaded)
       return;
-    if((errno=pthread_mutex_lock(d_lock)))
+
+    int err;
+    if((err = pthread_mutex_lock(d_lock))) {
+      errno = err;
       throw PDNSException("error acquiring lock: "+stringerror());
+    }
   }
   ~Lock()
   {
@@ -62,7 +66,9 @@ public:
     if(g_singleThreaded)
       return;
 
-    if((errno=pthread_rwlock_wrlock(d_lock))) {
+    int err;
+    if((err = pthread_rwlock_wrlock(d_lock))) {
+      errno = err;
       throw PDNSException("error acquiring rwlock wrlock: "+stringerror());
     }
   }
@@ -101,15 +107,20 @@ public:
     }
 
     d_havelock=false;
-    if((errno=pthread_rwlock_trywrlock(d_lock)) && errno!=EBUSY)
+    int err;
+    if((err = pthread_rwlock_trywrlock(d_lock)) && err!=EBUSY) {
+      errno = err;
       throw PDNSException("error acquiring rwlock tryrwlock: "+stringerror());
-    d_havelock=(errno==0);
+    }
+    d_havelock=(err==0);
   }
 
   TryWriteLock(TryWriteLock&& rhs)
   {
     d_lock = rhs.d_lock;
-    rhs.d_lock=0;
+    rhs.d_lock = nullptr;
+    d_havelock = rhs.d_havelock;
+    rhs.d_havelock = false;
   }
 
   
@@ -145,14 +156,19 @@ public:
       return;
     }
 
-    if((errno=pthread_rwlock_tryrdlock(d_lock)) && errno!=EBUSY)
+    int err;
+    if((err = pthread_rwlock_tryrdlock(d_lock)) && err!=EBUSY) {
+      errno = err;
       throw PDNSException("error acquiring rwlock tryrdlock: "+stringerror());
-    d_havelock=(errno==0);
+    }
+    d_havelock=(err==0);
   }
   TryReadLock(TryReadLock&& rhs)
   {
     d_lock = rhs.d_lock;
-    rhs.d_lock=0;
+    rhs.d_lock = nullptr;
+    d_havelock = rhs.d_havelock;
+    rhs.d_havelock = false;
   }
 
   ~TryReadLock()
@@ -183,8 +199,11 @@ public:
     if(g_singleThreaded)
       return;
 
-    if((errno=pthread_rwlock_rdlock(d_lock)))
+    int err;
+    if((err = pthread_rwlock_rdlock(d_lock))) {
+      errno = err;
       throw PDNSException("error acquiring rwlock readlock: "+stringerror());
+    }
   }
   ~ReadLock()
   {