summaryrefslogtreecommitdiff
path: root/gnu/packages/patches
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2019-12-09 17:17:07 +0100
committerLudovic Courtès <ludo@gnu.org>2019-12-09 18:32:05 +0100
commit4bd6f1d1d65b90ca90c3305404d820c5f4ca4427 (patch)
tree474a3731b08631933d8236721541005a8d7ffa51 /gnu/packages/patches
parent9a05da36b5945c49f17de846b50eb55d5ab7ff52 (diff)
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.
Diffstat (limited to 'gnu/packages/patches')
-rw-r--r--gnu/packages/patches/guile-finalization-crash.patch61
1 files changed, 61 insertions, 0 deletions
diff --git a/gnu/packages/patches/guile-finalization-crash.patch b/gnu/packages/patches/guile-finalization-crash.patch
new file mode 100644
index 0000000000..098249e49f
--- /dev/null
+++ b/gnu/packages/patches/guile-finalization-crash.patch
@@ -0,0 +1,61 @@
+commit edf5aea7ac852db2356ef36cba4a119eb0c81ea9
+Author: Ludovic Courtès <ludo@gnu.org>
+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 <jgibbons2357@gmail.com>.
+
+ * 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 ();
++ }
+ }
+ }
+ }