From 1aa6d558ac4d613c1ca7093bc34feade795f2a52 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Fri, 1 Apr 2016 10:18:10 +0530 Subject: [PATCH] Lock stderr in custom panic handler --- components/util/thread.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/components/util/thread.rs b/components/util/thread.rs index d51fd3dfa37..9175996a4b2 100644 --- a/components/util/thread.rs +++ b/components/util/thread.rs @@ -11,7 +11,7 @@ use std::sync::mpsc::Sender; use std::thread; use std::thread::Builder; use thread_state; -#[allow(unused_must_use)] + pub fn spawn_named(name: String, f: F) where F: FnOnce() + Send + 'static { @@ -24,11 +24,15 @@ pub fn spawn_named(name: String, f: F) let payload = info.payload(); if let Some(s) = payload.downcast_ref::() { if s.contains("SendError") { - write!(stderr(), "Thread \"{}\" panicked with an unwrap of `SendError` (backtrace skipped)\n", + let err = stderr(); + let _ = write!(err.lock(), "Thread \"{}\" panicked with an unwrap of \ + `SendError` (backtrace skipped)\n", thread::current().name().unwrap_or("")); return; } else if s.contains("RecvError") { - write!(stderr(), "Thread \"{}\" panicked with an unwrap of `RecvError` (backtrace skipped)\n", + let err = stderr(); + let _ = write!(err.lock(), "Thread \"{}\" panicked with an unwrap of \ + `RecvError` (backtrace skipped)\n", thread::current().name().unwrap_or("")); return; }