@@ -31,15 +31,12 @@ pub fn on_panic(obj: &(Any+Send), file: &'static str, line: u32) {
3131 None => "Box<Any>" ,
3232 }
3333 } ;
34- let mut err = match Stderr :: new ( ) {
35- Ok ( err) => err,
36- _ => return ,
37- } ;
34+ let mut err = Stderr :: new ( ) . ok ( ) ;
3835 let thread = thread_info:: current_thread ( ) ;
3936 let name = thread. as_ref ( ) . and_then ( |t| t. name ( ) ) . unwrap_or ( "<unnamed>" ) ;
4037 let prev = LOCAL_STDERR . with ( |s| s. borrow_mut ( ) . take ( ) ) ;
41- match prev {
42- Some ( mut stderr) => {
38+ match ( prev, err . as_mut ( ) ) {
39+ ( Some ( mut stderr) , _ ) => {
4340 // FIXME: what to do when the thread printing panics?
4441 let _ = writeln ! ( stderr,
4542 "thread '{}' panicked at '{}', {}:{}\n " ,
@@ -52,18 +49,22 @@ pub fn on_panic(obj: &(Any+Send), file: &'static str, line: u32) {
5249 * slot. borrow_mut ( ) = s. take ( ) ;
5350 } ) ;
5451 }
55- None => {
56- let _ = writeln ! ( & mut err, "thread '{}' panicked at '{}', {}:{}" ,
52+ ( None , Some ( ref mut err ) ) => {
53+ let _ = writeln ! ( err, "thread '{}' panicked at '{}', {}:{}" ,
5754 name, msg, file, line) ;
5855 if backtrace:: log_enabled ( ) {
59- let _ = backtrace:: write ( & mut err) ;
56+ let _ = backtrace:: write ( err) ;
6057 }
6158 }
59+ _ => { }
6260 }
6361
6462 // If this is a double panic, make sure that we printed a backtrace
6563 // for this panic.
66- if unwind:: panicking ( ) && !backtrace:: log_enabled ( ) {
67- let _ = backtrace:: write ( & mut err) ;
64+ match err {
65+ Some ( ref mut err) if unwind:: panicking ( ) && !backtrace:: log_enabled ( ) => {
66+ let _ = backtrace:: write ( err) ;
67+ }
68+ _ => { }
6869 }
6970}
0 commit comments