Previously any err value set before reaching lose: was overwritten and
thus not properly propagated.

Found using the Clang Static Analyzer.

* libports/create-internal.c (_ports_create_port_internal): Fix error
  handling.
---
 libports/create-internal.c |    7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/libports/create-internal.c b/libports/create-internal.c
index c60f6fd..ea3852d 100644
--- a/libports/create-internal.c
+++ b/libports/create-internal.c
@@ -109,10 +109,11 @@ _ports_create_port_internal (struct port_class *class,
   err = EINTR;
  lose:
   pthread_mutex_unlock (&_ports_lock);
+  error_t e;
  lose_unlocked:
-  err = mach_port_mod_refs (mach_task_self (), port,
-                           MACH_PORT_RIGHT_RECEIVE, -1);
-  assert_perror (err);
+  e = mach_port_mod_refs (mach_task_self (), port,
+                         MACH_PORT_RIGHT_RECEIVE, -1);
+  assert_perror (e);
   free (pi);
 
   return err;
-- 
1.7.10.4


Reply via email to