[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/release-0.4.0] torerr: Try harder to flush raw assert messages before process termination
commit c55591825fedb0fe1db92fab7b654ccc15ad50d3
Author: teor <teor@xxxxxxxxxxxxxx>
Date: Fri Aug 30 21:17:56 2019 +1000
torerr: Try harder to flush raw assert messages before process termination
Some platforms (macOS, maybe others?) can swallow the last write before an
abort. This issue is probably caused by a race condition between write
buffer cache flushing, and process termination. So we write an extra
newline, to make sure that the message always gets through.
Fixes bug 31571; bugfix on 0.3.5.1-alpha.
---
changes/bug31571 | 7 +++++++
src/lib/err/torerr.c | 8 +++++++-
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/changes/bug31571 b/changes/bug31571
new file mode 100644
index 000000000..86de3537b
--- /dev/null
+++ b/changes/bug31571
@@ -0,0 +1,7 @@
+ o Minor bugfixes (error handling):
+ - Report the tor version whenever an assertion fails. Previously, we only
+ reported the Tor version on some crashes, and some non-fatal assertions.
+ Fixes bug 31571; bugfix on 0.3.5.1-alpha.
+ - On abort, try harder to flush the output buffers of log messages. On
+ some platforms (macOS), log messages can be discarded when the process
+ terminates. Fixes bug 31571; bugfix on 0.3.5.1-alpha.
diff --git a/src/lib/err/torerr.c b/src/lib/err/torerr.c
index 88b19b732..6b5224273 100644
--- a/src/lib/err/torerr.c
+++ b/src/lib/err/torerr.c
@@ -146,13 +146,19 @@ tor_raw_assertion_failed_msg_(const char *file, int line, const char *expr,
format_dec_number_sigsafe(line, linebuf, sizeof(linebuf));
tor_log_err_sigsafe("INTERNAL ERROR: Raw assertion failed in ",
get_tor_backtrace_version(), " at ",
- file, ":", linebuf, ": ", expr, NULL);
+ file, ":", linebuf, ": ", expr, "\n", NULL);
if (msg) {
tor_log_err_sigsafe_write(msg);
tor_log_err_sigsafe_write("\n");
}
dump_stack_symbols_to_error_fds();
+
+ /* Some platforms (macOS, maybe others?) can swallow the last write before an
+ * abort. This issue is probably caused by a race condition between write
+ * buffer cache flushing, and process termination. So we write an extra
+ * newline, to make sure that the message always gets through. */
+ tor_log_err_sigsafe_write("\n");
}
/* As format_{hex,dex}_number_sigsafe, but takes a <b>radix</b> argument
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits