@@ -64,9 +64,8 @@ use prelude::v1::*;
6464
6565use  any:: Any ; 
6666use  boxed; 
67- use  cell:: Cell ; 
6867use  cmp; 
69- use  panicking; 
68+ use  panicking:: { self , PANIC_COUNT } ; 
7069use  fmt; 
7170use  intrinsics; 
7271use  mem; 
@@ -92,8 +91,6 @@ pub mod imp;
9291#[ path = "gcc.rs" ]   #[ doc( hidden) ]  
9392pub  mod  imp; 
9493
95- thread_local !  {  static  PANICKING :  Cell <bool > = Cell :: new( false )  } 
96- 
9794/// Invoke a closure, capturing the cause of panic if one occurs. 
9895/// 
9996/// This function will return `Ok(())` if the closure did not panic, and will 
@@ -131,9 +128,9 @@ pub unsafe fn try<F: FnOnce()>(f: F) -> Result<(), Box<Any + Send>> {
131128    // care of exposing correctly. 
132129    unsafe  fn  inner_try ( f :  fn ( * mut  u8 ) ,  data :  * mut  u8 ) 
133130                        -> Result < ( ) ,  Box < Any  + Send > >  { 
134-         PANICKING . with ( |s| { 
131+         PANIC_COUNT . with ( |s| { 
135132            let  prev = s. get ( ) ; 
136-             s. set ( false ) ; 
133+             s. set ( 0 ) ; 
137134            let  ep = intrinsics:: try ( f,  data) ; 
138135            s. set ( prev) ; 
139136            if  ep. is_null ( )  { 
@@ -161,7 +158,7 @@ pub unsafe fn try<F: FnOnce()>(f: F) -> Result<(), Box<Any + Send>> {
161158
162159/// Determines whether the current thread is unwinding because of panic. 
163160pub  fn  panicking ( )  -> bool  { 
164-     PANICKING . with ( |s| s. get ( ) ) 
161+     PANIC_COUNT . with ( |s| s. get ( )  !=  0 ) 
165162} 
166163
167164// An uninlined, unmangled function upon which to slap yer breakpoints 
@@ -234,17 +231,6 @@ fn begin_unwind_inner(msg: Box<Any + Send>,
234231    // First, invoke the default panic handler. 
235232    panicking:: on_panic ( & * msg,  file,  line) ; 
236233
237-     if  panicking ( )  { 
238-         // If a thread panics while it's already unwinding then we 
239-         // have limited options. Currently our preference is to 
240-         // just abort. In the future we may consider resuming 
241-         // unwinding or otherwise exiting the thread cleanly. 
242-         super :: util:: dumb_print ( format_args ! ( "thread panicked while panicking. \  
243-                                                aborting.") ) ; 
244-         unsafe  {  intrinsics:: abort ( )  } 
245-     } 
246-     PANICKING . with ( |s| s. set ( true ) ) ; 
247- 
248234    // Finally, perform the unwinding. 
249235    rust_panic ( msg) ; 
250236} 
0 commit comments