commit-hurd
[Top][All Lists]
Advanced

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

[hurd] 73/98: trans: improve the error handling in fakeauth


From: Samuel Thibault
Subject: [hurd] 73/98: trans: improve the error handling in fakeauth
Date: Tue, 14 Jan 2014 02:00:03 +0000

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

sthibault pushed a commit to branch upstream
in repository hurd.

commit 2640c8a8e32c2f20023e4cb91f87684c62316f19
Author: Justus Winter <address@hidden>
Date:   Fri Dec 6 00:04:39 2013 +0100

    trans: improve the error handling in fakeauth
    
    Previously the node was not correctly torn down if adding the newly
    created netnode to the hash table failed.  Fix this by rearranging the
    code, doing the hash table modification first because it is easier to
    undo.
    
    * trans/fakeroot.c (new_node): Fix the error handling.
---
 trans/fakeroot.c | 37 ++++++++++++++++++++-----------------
 1 file changed, 20 insertions(+), 17 deletions(-)

diff --git a/trans/fakeroot.c b/trans/fakeroot.c
index 5c4854d..3756f48 100644
--- a/trans/fakeroot.c
+++ b/trans/fakeroot.c
@@ -95,28 +95,31 @@ new_node (file_t file, mach_port_t idport, int locked, int 
openmodes,
          return err;
        }
     }
+
+  if (!locked)
+    pthread_mutex_lock (&idport_ihash_lock);
+  err = hurd_ihash_add (&idport_ihash, nn->idport, nn);
+  if (err)
+    goto lose;
+
   *np = nn->np = netfs_make_node (nn);
   if (*np == 0)
     {
-      if (locked)
-       pthread_mutex_unlock (&idport_ihash_lock);
       err = ENOMEM;
+      goto lose_hash;
     }
-  else
-    {
-      if (!locked)
-       pthread_mutex_lock (&idport_ihash_lock);
-      err = hurd_ihash_add (&idport_ihash, nn->idport, nn);
-      if (!err)
-       pthread_mutex_lock (&(*np)->lock);
-      pthread_mutex_unlock (&idport_ihash_lock);
-    }
-  if (err)
-    {
-      mach_port_deallocate (mach_task_self (), nn->idport);
-      mach_port_deallocate (mach_task_self (), file);
-      free (nn);
-    }
+
+  pthread_mutex_lock (&(*np)->lock);
+  pthread_mutex_unlock (&idport_ihash_lock);
+  return 0;
+
+ lose_hash:
+  hurd_ihash_locp_remove (&idport_ihash, nn->idport_locp);
+ lose:
+  pthread_mutex_unlock (&idport_ihash_lock);
+  mach_port_deallocate (mach_task_self (), nn->idport);
+  mach_port_deallocate (mach_task_self (), file);
+  free (nn);
   return err;
 }
 

-- 
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]