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