From: Remi Gacogne Date: Fri, 28 Jul 2017 13:34:03 +0000 (+0200) Subject: Lock: Don't access and even less write to errno unless we have to X-Git-Tag: rec-4.1.0-rc1~22^2~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d90dad50b5717c3774ac0ddd47b51a52843a35b6;p=pdns Lock: Don't access and even less write to errno unless we have to POSIX.1c made `errno` a thread-local, meaning its performance is far worse than the one of a local variable. --- diff --git a/pdns/lock.hh b/pdns/lock.hh index 4a0c4a116..a20c2208f 100644 --- a/pdns/lock.hh +++ b/pdns/lock.hh @@ -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,9 +107,12 @@ 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) @@ -145,9 +154,12 @@ 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) { @@ -183,8 +195,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() {