guix-commits
[Top][All Lists]
Advanced

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

04/05: gnu: guile: Add 2.2.6-1 with a finalization crash bug-fix.


From: guix-commits
Subject: 04/05: gnu: guile: Add 2.2.6-1 with a finalization crash bug-fix.
Date: Mon, 9 Dec 2019 12:32:12 -0500 (EST)

civodul pushed a commit to branch master
in repository guix.

commit 4bd6f1d1d65b90ca90c3305404d820c5f4ca4427
Author: Ludovic Courtès <address@hidden>
Date:   Mon Dec 9 17:17:07 2019 +0100

    gnu: guile: Add 2.2.6-1 with a finalization crash bug-fix.
    
    * gnu/packages/patches/guile-finalization-crash.patch: New file.
    * gnu/local.mk (dist_patch_DATA): Add it.
    * gnu/packages/guile.scm (guile-2.2/bug-fix): New variable.
---
 gnu/local.mk                                       |  1 +
 gnu/packages/guile.scm                             | 12 +++++
 .../patches/guile-finalization-crash.patch         | 61 ++++++++++++++++++++++
 3 files changed, 74 insertions(+)

diff --git a/gnu/local.mk b/gnu/local.mk
index f1223e2..0faa0ba 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -948,6 +948,7 @@ dist_patch_DATA =                                           
\
   %D%/packages/patches/guile-2.2-skip-oom-test.patch            \
   %D%/packages/patches/guile-default-utf8.patch                        \
   %D%/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch  \
+  %D%/packages/patches/guile-finalization-crash.patch          \
   %D%/packages/patches/guile-linux-syscalls.patch              \
   %D%/packages/patches/guile-present-coding.patch              \
   %D%/packages/patches/guile-relocatable.patch                 \
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index 3396899..9df008c 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -250,6 +250,18 @@ without requiring the source code to be rewritten.")
             (variable "GUILE_LOAD_COMPILED_PATH")
             (files '("lib/guile/2.2/site-ccache")))))))
 
+(define-public guile-2.2/bug-fix
+  ;; This variant contains a bug fix for a relatively rare crash that could
+  ;; affect shepherd as PID 1: <https://bugs.gnu.org/37757>.
+  (package
+    (inherit guile-2.2)
+    (version (string-append (package-version guile-2.2) "-1"))
+    (source (origin
+              (inherit (package-source guile-2.2))
+              (patches
+               (append (search-patches "guile-finalization-crash.patch")
+                       (origin-patches (package-source guile-2.2))))))))
+
 (define-public guile-2.2/fixed
   ;; A package of Guile 2.2 that's rarely changed.  It is the one used
   ;; in the `base' module, and thus changing it entails a full rebuild.
diff --git a/gnu/packages/patches/guile-finalization-crash.patch 
b/gnu/packages/patches/guile-finalization-crash.patch
new file mode 100644
index 0000000..098249e
--- /dev/null
+++ b/gnu/packages/patches/guile-finalization-crash.patch
@@ -0,0 +1,61 @@
+commit edf5aea7ac852db2356ef36cba4a119eb0c81ea9
+Author: Ludovic Courtès <address@hidden>
+Date:   Mon Dec 9 14:44:59 2019 +0100
+
+    Fix non-deterministic crash in 'finalization_thread_proc'.
+    
+    Fixes <https://bugs.gnu.org/37757>.
+    Reported by Jesse Gibbons <address@hidden>.
+    
+    * libguile/finalizers.c (finalization_thread_proc): Do not enter the
+    "switch (data.byte)" condition when data.n <= 0.
+
+diff --git a/libguile/finalizers.c b/libguile/finalizers.c
+index c5d69e8e3..94a6e6b0a 100644
+--- a/libguile/finalizers.c
++++ b/libguile/finalizers.c
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2012, 2013, 2014 Free Software Foundation, Inc.
++/* Copyright (C) 2012, 2013, 2014, 2019 Free Software Foundation, Inc.
+  *
+  * This library is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public License
+@@ -211,21 +211,26 @@ finalization_thread_proc (void *unused)
+ 
+       scm_without_guile (read_finalization_pipe_data, &data);
+       
+-      if (data.n <= 0 && data.err != EINTR) 
++      if (data.n <= 0)
+         {
+-          perror ("error in finalization thread");
+-          return NULL;
++          if (data.err != EINTR)
++            {
++              perror ("error in finalization thread");
++              return NULL;
++            }
+         }
+-
+-      switch (data.byte)
++      else
+         {
+-        case 0:
+-          scm_run_finalizers ();
+-          break;
+-        case 1:
+-          return NULL;
+-        default:
+-          abort ();
++          switch (data.byte)
++            {
++            case 0:
++              scm_run_finalizers ();
++              break;
++            case 1:
++              return NULL;
++            default:
++              abort ();
++            }
+         }
+     }
+ }



reply via email to

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