File tree 2 files changed +8
-8
lines changed
2 files changed +8
-8
lines changed Original file line number Diff line number Diff line change 11
11
12
12
use errors;
13
13
14
- use std:: cell:: RefCell ;
15
14
use std:: fs;
16
15
use std:: io;
17
16
use std:: path:: Path ;
@@ -32,23 +31,24 @@ pub trait PathError {
32
31
}
33
32
34
33
pub struct ErrorStorage {
35
- sender : Sender < Option < String > > ,
34
+ sender : Option < Sender < Option < String > > > ,
36
35
receiver : Receiver < Option < String > > ,
37
36
}
38
37
39
38
impl ErrorStorage {
40
39
pub fn new ( ) -> ErrorStorage {
41
40
let ( sender, receiver) = channel ( ) ;
42
41
ErrorStorage {
43
- sender,
42
+ sender : Some ( sender ) ,
44
43
receiver,
45
44
}
46
45
}
47
46
48
47
/// 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 {
50
49
let mut printed = 0 ;
51
- drop ( self . sender ) ;
50
+ // In order to drop the sender part of the channel.
51
+ self . sender = None ;
52
52
53
53
for msg in self . receiver . iter ( ) {
54
54
if let Some ( ref error) = msg {
@@ -95,7 +95,7 @@ impl DocFS {
95
95
// be to create the file sync so errors are reported eagerly.
96
96
let contents = contents. as_ref ( ) . to_vec ( ) ;
97
97
let path = path. as_ref ( ) . to_path_buf ( ) ;
98
- let sender = self . errors . sender . clone ( ) ;
98
+ let sender = self . errors . sender . clone ( ) . unwrap ( ) ;
99
99
rayon:: spawn ( move || {
100
100
match fs:: write ( & path, & contents) {
101
101
Ok ( _) => {
Original file line number Diff line number Diff line change @@ -552,7 +552,7 @@ pub fn run(mut krate: clean::Crate,
552
552
} ,
553
553
_ => PathBuf :: new ( ) ,
554
554
} ;
555
- let errors = Arc :: new ( ErrorStorage :: new ( ) ) ;
555
+ let mut errors = Arc :: new ( ErrorStorage :: new ( ) ) ;
556
556
let mut scx = SharedContext {
557
557
src_root,
558
558
passes,
@@ -722,7 +722,7 @@ pub fn run(mut krate: clean::Crate,
722
722
723
723
// And finally render the whole crate's documentation
724
724
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) ) ;
726
726
if ret. is_err ( ) {
727
727
ret
728
728
} else if nb_errors > 0 {
You can’t perform that action at this time.
0 commit comments