commit edf5aea7ac852db2356ef36cba4a119eb0c81ea9 Author: Ludovic Courtès Date: Mon Dec 9 14:44:59 2019 +0100 Fix non-deterministic crash in 'finalization_thread_proc'. Fixes . Reported by Jesse Gibbons . * 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 (); + } } } }