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 <4win...@informatik.uni-hamburg.de> 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