Skip to content

Commit 65f1295

Browse files
Better handling of the sender channel part in rustdoc file writing
1 parent 3eeb543 commit 65f1295

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

src/librustdoc/docfs.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
1212
use errors;
1313

14-
use std::cell::RefCell;
1514
use std::fs;
1615
use std::io;
1716
use std::path::Path;
@@ -32,23 +31,24 @@ pub trait PathError {
3231
}
3332

3433
pub struct ErrorStorage {
35-
sender: Sender<Option<String>>,
34+
sender: Option<Sender<Option<String>>>,
3635
receiver: Receiver<Option<String>>,
3736
}
3837

3938
impl 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(_) => {

src/librustdoc/html/render.rs

+2-2
Original file line numberDiff line numberDiff 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 {

0 commit comments

Comments
 (0)