https://github.com/numediart/MBROLA/pull/22

commit d4220958edd70354dbe47958394adf5d9a246117
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date:   Sun Jun 14 23:42:44 2020 +0200

    Fix spurious exit on speech interruption by espeakup
    
    espeak sends SIGUSR1 to make mbrola flush its output. Handling that signal
    however makes fgets return EINTR, as expected on System V systems.
    readline_InputFile thus has to loop over in that case. Otherwise it
    would erroneously think an error or EOF occurred and exit.

---
 Parser/input_file.c |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

--- a/Parser/input_file.c
+++ b/Parser/input_file.c
@@ -25,6 +25,7 @@
 
 #include "mbralloc.h"
 #include "input_file.h"
+#include <errno.h>
 
 
 /* TODO TODO Alleviate the writing
@@ -33,7 +34,13 @@
 
 static long readline_InputFile(Input* in, char *line, int size)
 {
-	return( (long) fgets(line, size, (FILE*)in->self));
+	char *ret;
+
+	do
+		ret = fgets(line, size, (FILE*)in->self);
+	while (ret == NULL && errno == EINTR);
+
+	return ret != NULL;
 }
 
 static void reset_InputFile(Input* in)
