@@ -260,7 +260,7 @@ impl Builder {
260260 T : Send + ' a , F : FnOnce ( ) -> T , F : Send + ' a
261261 {
262262 self . spawn_inner ( Thunk :: new ( f) ) . map ( |inner| {
263- JoinGuard { inner : inner, _marker : marker:: PhantomData }
263+ JoinGuard { inner : inner, _marker : marker:: CovariantType }
264264 } )
265265 }
266266
@@ -642,7 +642,7 @@ impl Drop for JoinHandle {
642642#[ stable( feature = "rust1" , since = "1.0.0" ) ]
643643pub struct JoinGuard < ' a , T : ' a > {
644644 inner : JoinInner < T > ,
645- _marker : marker:: PhantomData < & ' a T > ,
645+ _marker : marker:: CovariantType < & ' a T > ,
646646}
647647
648648#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -686,7 +686,9 @@ impl<T: Send> JoinGuard<'static, T> {
686686impl < ' a , T : Send + ' a > Drop for JoinGuard < ' a , T > {
687687 fn drop ( & mut self ) {
688688 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+ }
690692 }
691693 }
692694}
@@ -700,7 +702,8 @@ mod test {
700702 use boxed:: BoxAny ;
701703 use result;
702704 use std:: old_io:: { ChanReader , ChanWriter } ;
703- use super :: { self , Thread , Builder } ;
705+ use super :: { Thread , Builder } ;
706+ use thread;
704707 use thunk:: Thunk ;
705708 use time:: Duration ;
706709
@@ -718,7 +721,7 @@ mod test {
718721 fn test_named_thread ( ) {
719722 Builder :: new ( ) . name ( "ada lovelace" . to_string ( ) ) . scoped ( move || {
720723 assert ! ( thread:: current( ) . name( ) . unwrap( ) == "ada lovelace" . to_string( ) ) ;
721- } ) . join ( ) . ok ( ) . unwrap ( ) ;
724+ } ) . unwrap ( ) . join ( ) ;
722725 }
723726
724727 #[ test]
@@ -732,12 +735,9 @@ mod test {
732735
733736 #[ test]
734737 fn test_join_success ( ) {
735- match thread:: spawn ( move || -> String {
738+ assert ! ( thread:: scoped ( move|| -> String {
736739 "Success!" . to_string( )
737- } ) . join ( ) . as_ref ( ) . map ( |s| & * * s) {
738- result:: Result :: Ok ( "Success!" ) => ( ) ,
739- _ => panic ! ( )
740- }
740+ } ) . join( ) == "Success!" ) ;
741741 }
742742
743743 #[ test]
@@ -928,10 +928,9 @@ mod test {
928928 let mut reader = ChanReader :: new ( rx) ;
929929 let stdout = ChanWriter :: new ( tx) ;
930930
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 || {
932932 print ! ( "Hello, world!" ) ;
933- } ) . join ( ) ;
934- assert ! ( r. is_ok( ) ) ;
933+ } ) . unwrap ( ) . join ( ) ;
935934
936935 let output = reader. read_to_string ( ) . unwrap ( ) ;
937936 assert_eq ! ( output, "Hello, world!" . to_string( ) ) ;
0 commit comments