sync: remove DEBUG_LOCKCONTENTION preprocessor directives

to allow logging the lock contentions without the need to define
DEBUG_LOCKCONTENTION at compile time.
This commit is contained in:
Jon Atack 2021-08-18 12:34:18 +02:00
parent 9b08006bc5
commit 7e69873283
No known key found for this signature in database
GPG Key ID: 4F5721B3D0E3921D
2 changed files with 5 additions and 16 deletions

View File

@ -24,15 +24,10 @@
#include <utility>
#include <vector>
#ifdef DEBUG_LOCKCONTENTION
#if !defined(HAVE_THREAD_LOCAL)
static_assert(false, "thread_local is not supported");
#endif
void LockContention(const char* pszName, const char* pszFile, int nLine)
{
LOG_TIME_MICROS_WITH_CATEGORY(strprintf("%s, %s:%d", pszName, pszFile, nLine), BCLog::LOCK);
}
#endif /* DEBUG_LOCKCONTENTION */
#ifdef DEBUG_LOCKORDER
//

View File

@ -126,10 +126,8 @@ using RecursiveMutex = AnnotatedMixin<std::recursive_mutex>;
/** Wrapped mutex: supports waiting but not recursive locking */
typedef AnnotatedMixin<std::mutex> Mutex;
#ifdef DEBUG_LOCKCONTENTION
/** Prints a lock contention to the log */
void LockContention(const char* pszName, const char* pszFile, int nLine);
#endif
/** Wrapper around std::unique_lock style lock for Mutex. */
template <typename Mutex, typename Base = typename Mutex::UniqueLock>
@ -139,22 +137,18 @@ private:
void Enter(const char* pszName, const char* pszFile, int nLine)
{
EnterCritical(pszName, pszFile, nLine, Base::mutex());
#ifdef DEBUG_LOCKCONTENTION
if (!Base::try_lock()) {
LockContention(pszName, pszFile, nLine); // log the contention
#endif
Base::lock();
#ifdef DEBUG_LOCKCONTENTION
}
#endif
if (Base::try_lock()) return;
LockContention(pszName, pszFile, nLine); // log the contention
Base::lock();
}
bool TryEnter(const char* pszName, const char* pszFile, int nLine)
{
EnterCritical(pszName, pszFile, nLine, Base::mutex(), true);
Base::try_lock();
if (!Base::owns_lock())
if (!Base::owns_lock()) {
LeaveCritical();
}
return Base::owns_lock();
}