guile-commits
[Top][All Lists]
Advanced

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

[Guile-commits] 01/01: Fix non-deterministic crash in 'finalization_thre


From: Ludovic Courtès
Subject: [Guile-commits] 01/01: Fix non-deterministic crash in 'finalization_thread_proc'.
Date: Mon, 9 Dec 2019 08:46:51 -0500 (EST)

civodul pushed a commit to branch stable-2.2
in repository guile.

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.
---
 libguile/finalizers.c | 31 ++++++++++++++++++-------------
 1 file changed, 18 insertions(+), 13 deletions(-)

diff --git a/libguile/finalizers.c b/libguile/finalizers.c
index c5d69e8..94a6e6b 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]