diff options
-rw-r--r-- | gnu/local.mk | 1 | ||||
-rw-r--r-- | gnu/packages/base.scm | 3 | ||||
-rw-r--r-- | gnu/packages/patches/diffutils-fix-signal-processing.patch | 58 |
3 files changed, 61 insertions, 1 deletions
diff --git a/gnu/local.mk b/gnu/local.mk index b9ace3e0ef..21a462cdc2 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1002,6 +1002,7 @@ dist_patch_DATA = \ %D%/packages/patches/desmume-gcc7-fixes.patch \ %D%/packages/patches/dfu-programmer-fix-libusb.patch \ %D%/packages/patches/diffoscope-fix-llvm-test.patch \ + %D%/packages/patches/diffutils-fix-signal-processing.patch \ %D%/packages/patches/diffutils-gets-undeclared.patch \ %D%/packages/patches/dkimproxy-add-ipv6-support.patch \ %D%/packages/patches/docbook-xsl-nonrecursive-string-subst.patch \ diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm index ebbb093eac..9395c7e056 100644 --- a/gnu/packages/base.scm +++ b/gnu/packages/base.scm @@ -274,7 +274,8 @@ differences.") (sha256 (base32 "09isrg0isjinv8c535nxsi1s86wfdfzml80dbw41dj9x3hiad9xk")) - (patches (search-patches "coreutils-gnulib-tests.patch")))) + (patches (search-patches "coreutils-gnulib-tests.patch" + "diffutils-fix-signal-processing.patch")))) (build-system gnu-build-system) (native-inputs (list perl)) (synopsis "Comparing and merging files") diff --git a/gnu/packages/patches/diffutils-fix-signal-processing.patch b/gnu/packages/patches/diffutils-fix-signal-processing.patch new file mode 100644 index 0000000000..134dd3f718 --- /dev/null +++ b/gnu/packages/patches/diffutils-fix-signal-processing.patch @@ -0,0 +1,58 @@ +Author: Frédéric Bonnard <frediz@debian.org> + +Obtained from: + +https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=922552#19 + +Fixes bug reported upstream at: + +https://debbugs.gnu.org/cgi/bugreport.cgi?bug=34519 + +diff --git a/src/diff.c b/src/diff.c +index e2eb32437353..b574e8282dc9 100644 +--- a/src/diff.c ++++ b/src/diff.c +@@ -1451,6 +1451,8 @@ compare_files (struct comparison const *parent, + } + } + ++ final_process_signals (); ++ + /* Now the comparison has been done, if no error prevented it, + and STATUS is the value this function will return. */ + +diff --git a/src/diff.h b/src/diff.h +index 03daaa4a0530..e177fe600a25 100644 +--- a/src/diff.h ++++ b/src/diff.h +@@ -390,6 +390,7 @@ extern enum changes analyze_hunk (struct change *, lin *, lin *, lin *, lin *); + extern void begin_output (void); + extern void debug_script (struct change *); + extern void fatal (char const *) __attribute__((noreturn)); ++extern void final_process_signals (void); + extern void finish_output (void); + extern void message (char const *, char const *, char const *); + extern void message5 (char const *, char const *, char const *, +diff --git a/src/util.c b/src/util.c +index 4f4d9bb285eb..56d292de2927 100644 +--- a/src/util.c ++++ b/src/util.c +@@ -237,6 +237,18 @@ process_signals (void) + } + } + ++/* Process remaining signals once before exit */ ++void ++final_process_signals (void) ++{ ++ static int last = 1; ++ ++ if (last) { ++ process_signals (); ++ last = 0; ++ } ++} ++ + static void + install_signal_handlers (void) + { |