commit-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[hurd] 02/12: libdiskfs: fix and improve locking in nrefs/nput.


From: Samuel Thibault
Subject: [hurd] 02/12: libdiskfs: fix and improve locking in nrefs/nput.
Date: Tue, 23 Feb 2016 23:53:24 +0000

This is an automated email from the git hooks/post-receive script.

sthibault pushed a commit to branch upstream
in repository hurd.

commit 0f6a5081d875051e1b6275096d25332e66f0458c
Author: Flavio Cruz <address@hidden>
Date:   Sun Feb 14 18:37:16 2016 -0500

    libdiskfs: fix and improve locking in nrefs/nput.
    
    * libnetfs/node-nput.c: Do not unlock the node since it will be unlocked
    later.
    * libnetfs/node-nrele.c: Do not lock the node twice if not needed.
---
 libdiskfs/node-nput.c  | 1 -
 libdiskfs/node-nrele.c | 8 ++++++--
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/libdiskfs/node-nput.c b/libdiskfs/node-nput.c
index d23c103..d59769b 100644
--- a/libdiskfs/node-nput.c
+++ b/libdiskfs/node-nput.c
@@ -56,7 +56,6 @@ diskfs_nput (struct node *np)
             hold a weak reference ourselves. */
          diskfs_try_dropping_softrefs (np);
        }
-      pthread_mutex_unlock (&np->lock);
     }
 
   /* Finally get rid of our reference.  */
diff --git a/libdiskfs/node-nrele.c b/libdiskfs/node-nrele.c
index d962846..a96d134 100644
--- a/libdiskfs/node-nrele.c
+++ b/libdiskfs/node-nrele.c
@@ -28,6 +28,7 @@
 void
 diskfs_nrele (struct node *np)
 {
+  int locked = FALSE;
   struct references result;
 
   /* While we call the diskfs_try_dropping_softrefs, we need to hold
@@ -37,6 +38,7 @@ diskfs_nrele (struct node *np)
 
   if (result.hard == 0)
     {
+      locked = TRUE;
       pthread_mutex_lock (&np->lock);
       diskfs_lost_hardrefs (np);
       if (!np->dn_stat.st_nlink)
@@ -49,7 +51,6 @@ diskfs_nrele (struct node *np)
             hold a weak reference ourselves. */
          diskfs_try_dropping_softrefs (np);
        }
-      pthread_mutex_unlock (&np->lock);
     }
 
   /* Finally get rid of our reference.  */
@@ -57,7 +58,10 @@ diskfs_nrele (struct node *np)
 
   if (result.hard == 0 && result.weak == 0)
     {
-      pthread_mutex_lock (&np->lock);
+      if (! locked)
+        pthread_mutex_lock (&np->lock);
       diskfs_drop_node (np);
     }
+  else if (locked)
+    pthread_mutex_unlock (&np->lock);
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-hurd/hurd.git



reply via email to

[Prev in Thread] Current Thread [Next in Thread]