]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Merge branch 'maint-0.4.0' into maint-0.4.1
authorteor <teor@torproject.org>
Thu, 5 Dec 2019 00:14:01 +0000 (10:14 +1000)
committerteor <teor@torproject.org>
Thu, 5 Dec 2019 00:14:01 +0000 (10:14 +1000)
1  2 
src/lib/err/backtrace.c
src/lib/err/backtrace.h
src/lib/err/torerr.c
src/lib/process/process_unix.c
src/lib/process/process_win32.c
src/test/test_process_slow.c

index 2408a685139f24199f780544883e9b2f0c3e32e6,8606f4217704d47b80d9fd724e618612ba7ce5e0..8bc7e6965cc5c545e2be8fe564fa219236176575
@@@ -198,13 -193,12 +198,10 @@@ static int trap_signals[] = { SIGSEGV, 
  /** Install signal handlers as needed so that when we crash, we produce a
   * useful stack trace. Return 0 on success, -errno on failure. */
  static int
- install_bt_handler(const char *software)
+ install_bt_handler(void)
  {
 -  int trap_signals[] = { SIGSEGV, SIGILL, SIGFPE, SIGBUS, SIGSYS,
 -                         SIGIO, -1 };
    int i, rv=0;
  
-   strncpy(bt_version, software, sizeof(bt_version) - 1);
-   bt_version[sizeof(bt_version) - 1] = 0;
    struct sigaction sa;
  
    memset(&sa, 0, sizeof(sa));
@@@ -260,10 -237,11 +257,11 @@@ remove_bt_handler(void
  
  #ifdef NO_BACKTRACE_IMPL
  void
 -log_backtrace_impl(int severity, int domain, const char *msg,
 +log_backtrace_impl(int severity, log_domain_mask_t domain, const char *msg,
                     tor_log_fn logger)
  {
-   logger(severity, domain, "%s. (Stack trace not available)", msg);
+   logger(severity, domain, "%s: %s. (Stack trace not available)",
+          bt_version, msg);
  }
  
  static int
Simple merge
index 21b28a5f69247075189af75985d5976b7362a11f,1a246e995c7d95eaa5496c238c0b631fe6e785c2..b7e32a3e20f48e7c6944d2ee7466b204836860b0
@@@ -206,20 -163,14 +207,26 @@@ tor_raw_assertion_failed_msg_(const cha
    }
  
    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");
  }
  
 +/**
 + * Call the abort() function to kill the current process with a fatal
 + * error. But first, close the raw error file descriptors, so error messages
 + * are written before process termination.
 + **/
 +void
 +tor_raw_abort_(void)
 +{
 +  tor_log_close_sigsafe_err_fds();
 +  abort();
 +}
 +
  /* As format_{hex,dex}_number_sigsafe, but takes a <b>radix</b> argument
   * in range 2..16 inclusive. */
  static int
Simple merge
Simple merge
Simple merge