]> git.itanic.dy.fi Git - rrdd/blobdiff - process.c
Improve mutex debugging prints
[rrdd] / process.c
index 13fe7e58fbd5a0f6e828e72d0bbff0e0df11575b..a54f3dd0ffb5dd00e00823d07b2c6f700ccdb7b0 100644 (file)
--- a/process.c
+++ b/process.c
@@ -608,24 +608,32 @@ void _mutex_lock_acquired(struct mutex *lock, char *file, int line)
 {
        lock->line = line;
        lock->file = file;
+       pthread_getname_np(pthread_self(),
+                       lock->owner_name, sizeof(lock->owner_name));
 }
 
 int _mutex_lock(struct mutex *lock, char *file, int line)
 {
        int ret = 0;
+       int contended = 0;
 
        if (!pthread_mutex_trylock(&lock->lock))
                goto out_lock;
 
-       pr_info("Lock contention on lock %s on %s:%d\n",
-               lock->name, lock->file, lock->line);
+       contended = 1;
+       pr_info("Lock contention at %s:%d on lock %s acquired by %s at %s:%d\n",
+               file, line, lock->name,
+               lock->owner_name, lock->file, lock->line);
 
        ret = pthread_mutex_lock(&lock->lock);
        if (ret)
-               pr_err("Acquirin lock %s failed: %m, acquired %s:%d\n",
+               pr_err("Acquirin lock %s failed: %m, acquired on %s:%d\n",
                        lock->name, lock->file, lock->line);
 
 out_lock:
+       if (contended)
+               pr_info("Lock %s acquired at %s:%d after contention\n",
+                       lock->name, file, line);
        _mutex_lock_acquired(lock, file, line);
        return ret;
 }