summaryrefslogtreecommitdiff
path: root/cleanup.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2009-11-08 00:12:33 -0800
committerWayne Davison <wayned@samba.org>2009-11-08 00:12:33 -0800
commit9270e88d76d3ea9e94d48977fbea57b997545577 (patch)
tree9e1b3fd5e32a6092fc43b7a24e3632bebbe2be68 /cleanup.c
parent2907af472d1f33b3c422cb9f601c121b242aa9c7 (diff)
downloadrsync-9270e88d76d3ea9e94d48977fbea57b997545577.tar.gz
rsync-9270e88d76d3ea9e94d48977fbea57b997545577.tar.bz2
rsync-9270e88d76d3ea9e94d48977fbea57b997545577.zip
Save first filename and linenum in case exit_cleanup() recurses.
Diffstat (limited to 'cleanup.c')
-rw-r--r--cleanup.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/cleanup.c b/cleanup.c
index 4ff5b9c0..2b1d6974 100644
--- a/cleanup.c
+++ b/cleanup.c
@@ -98,14 +98,18 @@ pid_t cleanup_child_pid = -1;
NORETURN void _exit_cleanup(int code, const char *file, int line)
{
static int cleanup_step = 0;
- static int exit_code = 0;
+ static int exit_code = 0, exit_line = 0;
+ static const char *exit_file = NULL;
static int unmodified_code = 0;
SIGACTION(SIGUSR1, SIG_IGN);
SIGACTION(SIGUSR2, SIG_IGN);
- if (exit_code) /* Preserve first error code when recursing. */
+ if (exit_code) { /* Preserve first exit info when recursing. */
code = exit_code;
+ file = exit_file;
+ line = exit_line;
+ }
/* If this is the exit at the end of the run, the server side
* should not attempt to output a message (see log_exit()). */
@@ -118,6 +122,8 @@ NORETURN void _exit_cleanup(int code, const char *file, int line)
#include "case_N.h" /* case 0: cleanup_step++; */
exit_code = unmodified_code = code;
+ exit_file = file;
+ exit_line = line;
if (output_needs_newline) {
fputc('\n', stdout);