File tree Expand file tree Collapse file tree 2 files changed +8
-8
lines changed Expand file tree Collapse file tree 2 files changed +8
-8
lines changed Original file line number Diff line number Diff line change 1111
1212use errors;
1313
14- use std:: cell:: RefCell ;
1514use std:: fs;
1615use std:: io;
1716use std:: path:: Path ;
@@ -32,23 +31,24 @@ pub trait PathError {
3231}
3332
3433pub struct ErrorStorage {
35- sender : Sender < Option < String > > ,
34+ sender : Option < Sender < Option < String > > > ,
3635 receiver : Receiver < Option < String > > ,
3736}
3837
3938impl ErrorStorage {
4039 pub fn new ( ) -> ErrorStorage {
4140 let ( sender, receiver) = channel ( ) ;
4241 ErrorStorage {
43- sender,
42+ sender : Some ( sender ) ,
4443 receiver,
4544 }
4645 }
4746
4847 /// Prints all stored errors. Returns the number of printed errors.
49- pub fn write_errors ( & self , diag : & errors:: Handler ) -> usize {
48+ pub fn write_errors ( & mut self , diag : & errors:: Handler ) -> usize {
5049 let mut printed = 0 ;
51- drop ( self . sender ) ;
50+ // In order to drop the sender part of the channel.
51+ self . sender = None ;
5252
5353 for msg in self . receiver . iter ( ) {
5454 if let Some ( ref error) = msg {
@@ -95,7 +95,7 @@ impl DocFS {
9595 // be to create the file sync so errors are reported eagerly.
9696 let contents = contents. as_ref ( ) . to_vec ( ) ;
9797 let path = path. as_ref ( ) . to_path_buf ( ) ;
98- let sender = self . errors . sender . clone ( ) ;
98+ let sender = self . errors . sender . clone ( ) . unwrap ( ) ;
9999 rayon:: spawn ( move || {
100100 match fs:: write ( & path, & contents) {
101101 Ok ( _) => {
Original file line number Diff line number Diff line change @@ -552,7 +552,7 @@ pub fn run(mut krate: clean::Crate,
552552 } ,
553553 _ => PathBuf :: new ( ) ,
554554 } ;
555- let errors = Arc :: new ( ErrorStorage :: new ( ) ) ;
555+ let mut errors = Arc :: new ( ErrorStorage :: new ( ) ) ;
556556 let mut scx = SharedContext {
557557 src_root,
558558 passes,
@@ -722,7 +722,7 @@ pub fn run(mut krate: clean::Crate,
722722
723723 // And finally render the whole crate's documentation
724724 let ret = cx. krate ( krate) ;
725- let nb_errors = errors. write_errors ( diag) ;
725+ let nb_errors = Arc :: get_mut ( & mut errors) . map_or_else ( || 0 , |errors| errors . write_errors ( diag) ) ;
726726 if ret. is_err ( ) {
727727 ret
728728 } else if nb_errors > 0 {
You can’t perform that action at this time.
0 commit comments