From f234f5b0e120ea8cfa850440a428c3bc211b329b Mon Sep 17 00:00:00 2001 From: Thiago Jung Bauermann Date: Thu, 9 Sep 2021 11:41:14 -0300 Subject: [PATCH] gnu: diffutils: Fix signal processing. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit diffutils has a race condition in its signal processing code which is easy to trigger on powerpc64le-linux. More often than not, it causes the ‘colors’ test to fail and therefore the build of the package fails as well. Add the patch proposed in Debian bug 922552 which fixes the problem. * gnu/packages/patches/diffutils-fix-signal-processing.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/base.scm (diffutils)[source]: Use it. Signed-off-by: Maxim Cournoyer --- gnu/local.mk | 1 + gnu/packages/base.scm | 3 +- .../diffutils-fix-signal-processing.patch | 58 +++++++++++++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/diffutils-fix-signal-processing.patch diff --git a/gnu/local.mk b/gnu/local.mk index b9ace3e0ef132e96646e823c872569da81fd73f6..21a462cdc24d0f1fb18b91ea59e7c1da7c6364e4 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 ebbb093eac6007bf0ff19b4f08ab1d64e9a31653..9395c7e056cb70c8a582726b627e10e667b7eb13 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 0000000000000000000000000000000000000000..134dd3f718bda67f40ca50e4485415aaa3a6f9ac --- /dev/null +++ b/gnu/packages/patches/diffutils-fix-signal-processing.patch @@ -0,0 +1,58 @@ +Author: Frédéric Bonnard + +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) + {