diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2019-06-21 00:26:13 +0200 |
|---|---|---|
| committer | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2019-06-21 12:00:49 +0200 |
| commit | 65f12950b64cbea42e97f1425952c77cf024d5ed (patch) | |
| tree | 77606f7c5652cda53707b3b4dadcc64913742d59 | |
| parent | 3eeb543504602d04c2f4374834ee9c67bb525300 (diff) | |
| download | rust-65f12950b64cbea42e97f1425952c77cf024d5ed.tar.gz rust-65f12950b64cbea42e97f1425952c77cf024d5ed.zip | |
Better handling of the sender channel part in rustdoc file writing
| -rw-r--r-- | src/librustdoc/docfs.rs | 12 | ||||
| -rw-r--r-- | src/librustdoc/html/render.rs | 4 |
2 files changed, 8 insertions, 8 deletions
diff --git a/src/librustdoc/docfs.rs b/src/librustdoc/docfs.rs index 96399b8e36f..740947fc3e3 100644 --- a/src/librustdoc/docfs.rs +++ b/src/librustdoc/docfs.rs @@ -11,7 +11,6 @@ use errors; -use std::cell::RefCell; use std::fs; use std::io; use std::path::Path; @@ -32,7 +31,7 @@ pub trait PathError { } pub struct ErrorStorage { - sender: Sender<Option<String>>, + sender: Option<Sender<Option<String>>>, receiver: Receiver<Option<String>>, } @@ -40,15 +39,16 @@ impl ErrorStorage { pub fn new() -> ErrorStorage { let (sender, receiver) = channel(); ErrorStorage { - sender, + sender: Some(sender), receiver, } } /// Prints all stored errors. Returns the number of printed errors. - pub fn write_errors(&self, diag: &errors::Handler) -> usize { + pub fn write_errors(&mut self, diag: &errors::Handler) -> usize { let mut printed = 0; - drop(self.sender); + // In order to drop the sender part of the channel. + self.sender = None; for msg in self.receiver.iter() { if let Some(ref error) = msg { @@ -95,7 +95,7 @@ impl DocFS { // be to create the file sync so errors are reported eagerly. let contents = contents.as_ref().to_vec(); let path = path.as_ref().to_path_buf(); - let sender = self.errors.sender.clone(); + let sender = self.errors.sender.clone().unwrap(); rayon::spawn(move || { match fs::write(&path, &contents) { Ok(_) => { diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index fe5fb4d73d8..f0aff961c67 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -552,7 +552,7 @@ pub fn run(mut krate: clean::Crate, }, _ => PathBuf::new(), }; - let errors = Arc::new(ErrorStorage::new()); + let mut errors = Arc::new(ErrorStorage::new()); let mut scx = SharedContext { src_root, passes, @@ -722,7 +722,7 @@ pub fn run(mut krate: clean::Crate, // And finally render the whole crate's documentation let ret = cx.krate(krate); - let nb_errors = errors.write_errors(diag); + let nb_errors = Arc::get_mut(&mut errors).map_or_else(|| 0, |errors| errors.write_errors(diag)); if ret.is_err() { ret } else if nb_errors > 0 { |
