From 837bd79b20d4b9b8525a42999a9d1911f8980aa4 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 2 Feb 2012 17:52:11 +0100 Subject: db_lock: add assertions --- src/db_lock.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'src/db_lock.h') diff --git a/src/db_lock.h b/src/db_lock.h index 1e557b985..4640502f3 100644 --- a/src/db_lock.h +++ b/src/db_lock.h @@ -30,9 +30,26 @@ #include #include +#include extern GStaticMutex db_mutex; +#ifndef NDEBUG + +extern GThread *db_mutex_holder; + +/** + * Does the current thread hold the database lock? + */ +G_GNUC_PURE +static inline bool +holding_db_lock(void) +{ + return db_mutex_holder == g_thread_self(); +} + +#endif + /** * Obtain the global database lock. This is needed before * dereferencing a #song or #directory. It is not recursive. @@ -40,7 +57,14 @@ extern GStaticMutex db_mutex; static inline void db_lock(void) { + assert(!holding_db_lock()); + g_static_mutex_lock(&db_mutex); + + assert(db_mutex_holder == NULL); +#ifndef NDEBUG + db_mutex_holder = g_thread_self(); +#endif } /** @@ -49,6 +73,11 @@ db_lock(void) static inline void db_unlock(void) { + assert(holding_db_lock()); +#ifndef NDEBUG + db_mutex_holder = NULL; +#endif + g_static_mutex_unlock(&db_mutex); } -- cgit v1.2.3