@@ -260,7 +260,7 @@ impl Builder {
260
260
T : Send + ' a , F : FnOnce ( ) -> T , F : Send + ' a
261
261
{
262
262
self . spawn_inner ( Thunk :: new ( f) ) . map ( |inner| {
263
- JoinGuard { inner : inner, _marker : marker:: PhantomData }
263
+ JoinGuard { inner : inner, _marker : marker:: CovariantType }
264
264
} )
265
265
}
266
266
@@ -642,7 +642,7 @@ impl Drop for JoinHandle {
642
642
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
643
643
pub struct JoinGuard < ' a , T : ' a > {
644
644
inner : JoinInner < T > ,
645
- _marker : marker:: PhantomData < & ' a T > ,
645
+ _marker : marker:: CovariantType < & ' a T > ,
646
646
}
647
647
648
648
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -686,7 +686,9 @@ impl<T: Send> JoinGuard<'static, T> {
686
686
impl < ' a , T : Send + ' a > Drop for JoinGuard < ' a , T > {
687
687
fn drop ( & mut self ) {
688
688
if !self . inner . joined {
689
- unsafe { imp:: join ( self . inner . native ) } ;
689
+ if self . inner . join ( ) . is_err ( ) {
690
+ panic ! ( "child thread {:?} panicked" , self . thread( ) ) ;
691
+ }
690
692
}
691
693
}
692
694
}
@@ -700,7 +702,8 @@ mod test {
700
702
use boxed:: BoxAny ;
701
703
use result;
702
704
use std:: old_io:: { ChanReader , ChanWriter } ;
703
- use super :: { self , Thread , Builder } ;
705
+ use super :: { Thread , Builder } ;
706
+ use thread;
704
707
use thunk:: Thunk ;
705
708
use time:: Duration ;
706
709
@@ -718,7 +721,7 @@ mod test {
718
721
fn test_named_thread ( ) {
719
722
Builder :: new ( ) . name ( "ada lovelace" . to_string ( ) ) . scoped ( move || {
720
723
assert ! ( thread:: current( ) . name( ) . unwrap( ) == "ada lovelace" . to_string( ) ) ;
721
- } ) . join ( ) . ok ( ) . unwrap ( ) ;
724
+ } ) . unwrap ( ) . join ( ) ;
722
725
}
723
726
724
727
#[ test]
@@ -732,12 +735,9 @@ mod test {
732
735
733
736
#[ test]
734
737
fn test_join_success ( ) {
735
- match thread:: spawn ( move || -> String {
738
+ assert ! ( thread:: scoped ( move|| -> String {
736
739
"Success!" . to_string( )
737
- } ) . join ( ) . as_ref ( ) . map ( |s| & * * s) {
738
- result:: Result :: Ok ( "Success!" ) => ( ) ,
739
- _ => panic ! ( )
740
- }
740
+ } ) . join( ) == "Success!" ) ;
741
741
}
742
742
743
743
#[ test]
@@ -928,10 +928,9 @@ mod test {
928
928
let mut reader = ChanReader :: new ( rx) ;
929
929
let stdout = ChanWriter :: new ( tx) ;
930
930
931
- let r = Builder :: new ( ) . stdout ( box stdout as Box < Writer + Send > ) . scoped ( move || {
931
+ Builder :: new ( ) . stdout ( box stdout as Box < Writer + Send > ) . scoped ( move || {
932
932
print ! ( "Hello, world!" ) ;
933
- } ) . join ( ) ;
934
- assert ! ( r. is_ok( ) ) ;
933
+ } ) . unwrap ( ) . join ( ) ;
935
934
936
935
let output = reader. read_to_string ( ) . unwrap ( ) ;
937
936
assert_eq ! ( output, "Hello, world!" . to_string( ) ) ;
0 commit comments