summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2021-02-18 15:20:52 -0500
committerGitHub <noreply@github.com>2021-02-18 15:20:52 -0500
commitbb30e9291e2e3964aac2d2ca05b739dcc67d64a0 (patch)
treeb1d139e8f814c1bae7589618c3a5421154234d02
parentd9b1f96897239bf7de8cdfd11d40e3f99bb29a4a (diff)
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.
-rw-r--r--cli/ast.rs18
1 files changed, 6 insertions, 12 deletions
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<RwLock<Vec<Diagnostic>>>);
-
-impl ErrorBuffer {
- pub fn new() -> Self {
- Self(Arc::new(RwLock::new(Vec::new())))
- }
-}
+#[derive(Debug, Clone, Default)]
+pub struct ErrorBuffer(Arc<Mutex<Vec<Diagnostic>>>);
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();