emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#50239: closed ([PATCH core-updates-frozen] gnu: diffutils: Fix signa


From: GNU bug Tracking System
Subject: bug#50239: closed ([PATCH core-updates-frozen] gnu: diffutils: Fix signal processing.)
Date: Fri, 12 Nov 2021 06:01:02 +0000

Your message dated Fri, 12 Nov 2021 01:00:33 -0500
with message-id <87h7chq5fi.fsf_-_@gmail.com>
and subject line Re: bug#50239: [PATCH core-updates-frozen] gnu: diffutils: Fix 
signal processing.
has caused the debbugs.gnu.org bug report #50239,
regarding [PATCH core-updates-frozen] gnu: diffutils: Fix signal processing.
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs@gnu.org.)


-- 
50239: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=50239
GNU Bug Tracking System
Contact help-debbugs@gnu.org with problems
--- Begin Message --- Subject: [PATCH core-updates-frozen] gnu: diffutils: Fix signal processing. Date: Sat, 28 Aug 2021 13:43:57 -0300
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.
---

Hello,

This fixes the build of diffutils on powerpc64le-linux, which currently
fails more often than not. The patch I’m adding here isn’t being
shipped by Debian and hasn’t been seen by upstream yet. I just brought
it to their attention here:

https://debbugs.gnu.org/cgi/bugreport.cgi?bug=34519#11

I’m not familiar with the diffutils code base, but FWIW I analysed
the patch and it looks very reasonable to me. To be honest I’m not
sure if it completely fixes the race condition or just makes it much
less likely to happen, but in any case I can’t hit the race condition
anymore.

In addition, since all it does is add a new call to the function which
checks and processes any pending signal, I don’t think it can cause
any harm.

Finally, this patch is based on top of the one which updates diffutils
to version 3.8:

https://issues.guix.gnu.org/50233

The fix works equally well in version 3.7 so if you think it’s not
worth updating diffutils I can rebase this patch on top of current
‘core-updates-frozen’.

 gnu/local.mk                                  |  1 +
 gnu/packages/base.scm                         |  3 +-
 .../diffutils-fix-signal-processing.patch     | 60 +++++++++++++++++++
 3 files changed, 63 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 11b002b66e72..bc385eecc592 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -962,6 +962,7 @@ dist_patch_DATA =                                           
\
   %D%/packages/patches/desmume-gcc6-fixes.patch                        \
   %D%/packages/patches/desmume-gcc7-fixes.patch                        \
   %D%/packages/patches/dfu-programmer-fix-libusb.patch         \
+  %D%/packages/patches/diffutils-fix-signal-processing.patch   \
   %D%/packages/patches/diffutils-gets-undeclared.patch         \
   %D%/packages/patches/disarchive-cross-compilation.patch      \
   %D%/packages/patches/dkimproxy-add-ipv6-support.patch                \
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 2c648953ae39..0e3b346b93a0 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -272,7 +272,8 @@ differences.")
                                 version ".tar.xz"))
             (sha256
              (base32
-              "1v4g8gi0lgakqa7iix8s4fq7lq6l92vw3rjd9wfd2rhjng8xggd6"))))
+              "1v4g8gi0lgakqa7iix8s4fq7lq6l92vw3rjd9wfd2rhjng8xggd6"))
+            (patches (search-patches 
"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 000000000000..24130bd4c37a
--- /dev/null
+++ b/gnu/packages/patches/diffutils-fix-signal-processing.patch
@@ -0,0 +1,60 @@
+Author: Frédéric Bonnard <frediz@debian.org>
+
+Obtained from:
+
+https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=922552#19
+
+and slightly adapted to apply on v3.8.
+
+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 9938daa0c8fd..2bc443f1ca70 100644
+--- a/src/diff.c
++++ b/src/diff.c
+@@ -1453,6 +1453,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 27362c010fd2..28c89b0797ef 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 4348757e1507..8954197f33fc 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)
+ {



--- End Message ---
--- Begin Message --- Subject: Re: bug#50239: [PATCH core-updates-frozen] gnu: diffutils: Fix signal processing. Date: Fri, 12 Nov 2021 01:00:33 -0500 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux)
Thiago Jung Bauermann <bauermann@kolabnow.com> writes:

> 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.
> ---

Applied with commit f234f5b0e120ea8cfa850440a428c3bc211b329b to
core-updates-frozen, and diffutils was updated to 3.8 with
57fd6d511c678eeee88f254c511847a56f86f85f there as well.

Closing,

Thank you!

Maxim


--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]