aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--main.c4
-rw-r--r--msg.c2
3 files changed, 12 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index b467eb23..087dd7c1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2018-02-10 Arnold D. Robbins <arnold@skeeve.com>
+
+ * main.c, msg.c: Add a call to fflush(NULL) before each call
+ to abort(), since GLIBC 2.27 doesn't necessarily flush before
+ aborting. Thanks to Nelson H.F. Beebe for the report.
+
2018-02-09 Arnold D. Robbins <arnold@skeeve.com>
* io.c (socketopen): Rearrange assigning the flags to use
diff --git a/main.c b/main.c
index 2860d246..25a628ba 100644
--- a/main.c
+++ b/main.c
@@ -1226,6 +1226,8 @@ catchsig(int sig)
set_loc(__FILE__, __LINE__);
msg(_("fatal error: internal error"));
/* fatal won't abort() if not compiled for debugging */
+ // GLIBC 2.27 doesn't necessarily flush on abort. Sigh.
+ fflush(NULL);
abort();
} else
cant_happen();
@@ -1240,6 +1242,7 @@ catchsegv(void *fault_address, int serious)
{
set_loc(__FILE__, __LINE__);
msg(_("fatal error: internal error: segfault"));
+ fflush(NULL);
abort();
/*NOTREACHED*/
return 0;
@@ -1252,6 +1255,7 @@ catchstackoverflow(int emergency, stackoverflow_context_t scp)
{
set_loc(__FILE__, __LINE__);
msg(_("fatal error: internal error: stack overflow"));
+ fflush(NULL);
abort();
/*NOTREACHED*/
return;
diff --git a/msg.c b/msg.c
index b4746988..20732bcd 100644
--- a/msg.c
+++ b/msg.c
@@ -101,6 +101,8 @@ err(bool isfatal, const char *s, const char *emsg, va_list argp)
if (isfatal) {
#ifdef GAWKDEBUG
+ // GLIBC 2.27 doesn't necessarily flush on abort. Sigh.
+ fflush(NULL);
abort();
#endif
gawk_exit(EXIT_FATAL);