From bb30e9291e2e3964aac2d2ca05b739dcc67d64a0 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Thu, 18 Feb 2021 15:20:52 -0500 Subject: refactor: use Mutex for ErrorBuffer (#9539) RwLock should only be used in circumstatnces where it has some benefit. Multiple concurrent readers is usually an undesirable design bug. --- cli/ast.rs | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) (limited to 'cli/ast.rs') diff --git a/cli/ast.rs b/cli/ast.rs index 156faf972..a8bc5adb4 100644 --- a/cli/ast.rs +++ b/cli/ast.rs @@ -12,7 +12,7 @@ use std::fmt; use std::ops::Range; use std::rc::Rc; use std::sync::Arc; -use std::sync::RwLock; +use std::sync::Mutex; use swc_common::chain; use swc_common::comments::Comment; use swc_common::comments::CommentKind; @@ -107,7 +107,7 @@ impl DiagnosticBuffer { where F: Fn(Span) -> Loc, { - let s = error_buffer.0.read().unwrap().clone(); + let s = error_buffer.0.lock().unwrap().clone(); let diagnostics = s .iter() .map(|d| { @@ -134,18 +134,12 @@ impl DiagnosticBuffer { } /// A buffer for collecting errors from the AST parser. -#[derive(Debug, Clone)] -pub struct ErrorBuffer(Arc>>); - -impl ErrorBuffer { - pub fn new() -> Self { - Self(Arc::new(RwLock::new(Vec::new()))) - } -} +#[derive(Debug, Clone, Default)] +pub struct ErrorBuffer(Arc>>); impl Emitter for ErrorBuffer { fn emit(&mut self, db: &DiagnosticBuilder) { - self.0.write().unwrap().push((**db).clone()); + self.0.lock().unwrap().push((**db).clone()); } } @@ -365,7 +359,7 @@ pub fn parse_with_source_map( FileName::Custom(specifier.to_string()), source.to_string(), ); - let error_buffer = ErrorBuffer::new(); + let error_buffer = ErrorBuffer::default(); let syntax = get_syntax(media_type); let input = StringInput::from(&*source_file); let comments = SingleThreadedComments::default(); -- cgit v1.2.3