Save first filename and linenum in case exit_cleanup() recurses.
authorWayne Davison <wayned@samba.org>
Sun, 8 Nov 2009 08:12:33 +0000 (00:12 -0800)
committerWayne Davison <wayned@samba.org>
Sun, 13 Dec 2009 01:25:06 +0000 (17:25 -0800)
cleanup.c

index 38b474a19a9ea4ea7a25a8984bb0393bf9616a90..f9b73d7b03bc8fc4de957f30f39dead1971dd3f9 100644 (file)
--- a/cleanup.c
+++ b/cleanup.c
@@ -94,14 +94,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.c). */
@@ -114,6 +118,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 (verbose > 3) {
                        rprintf(FINFO,