@@ -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