The cleanup phase of tfork_create() saves errno prior to calling
functions that might modify it, with the intention of restoring it
afterwards. However, the value of 'ret' is accidentally overwritten. It
will always be equal to 0, and hence errno will not be restored.
Fix this by introducing a new variable, ret2, for calling functions in
the cleanup phase.
Signed-off-by: Joseph Sutton <josephsutton@catalyst.net.nz>
Reviewed-by: Jeremy Allison <jra@samba.org>
struct tfork_state *state = NULL;
struct tfork *t = NULL;
pid_t pid;
- int saved_errno;
+ int saved_errno = 0;
int ret = 0;
+ int ret2;
#ifdef HAVE_PTHREAD
ret = pthread_once(&tfork_global_is_initialized,
close(t->event_fd);
}
- ret = tfork_create_reap_waiter(state->waiter_pid);
- assert(ret == 0);
+ ret2 = tfork_create_reap_waiter(state->waiter_pid);
+ assert(ret2 == 0);
free(t);
t = NULL;
}
}
- ret = tfork_uninstall_sigchld_handler();
- assert(ret == 0);
+ ret2 = tfork_uninstall_sigchld_handler();
+ assert(ret2 == 0);
tfork_global_free();