summaryrefslogtreecommitdiff
path: root/serde_v8/magic/buffer.rs
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2022-09-13 20:56:59 +0530
committerGitHub <noreply@github.com>2022-09-13 20:56:59 +0530
commit51ba4764d1ca089eb65d333eb8797e064ac4c550 (patch)
tree49162f1bffb6121d16207c7191787f46344b7871 /serde_v8/magic/buffer.rs
parentb4e618315abbd86f682e8850e6afd90bcd3dd579 (diff)
perf(serde_v8): remove Mutex from ZeroCopyBuf (#15888)
Diffstat (limited to 'serde_v8/magic/buffer.rs')
-rw-r--r--serde_v8/magic/buffer.rs21
1 files changed, 7 insertions, 14 deletions
diff --git a/serde_v8/magic/buffer.rs b/serde_v8/magic/buffer.rs
index eec027e17..413e56747 100644
--- a/serde_v8/magic/buffer.rs
+++ b/serde_v8/magic/buffer.rs
@@ -3,7 +3,6 @@
use std::fmt::Debug;
use std::ops::Deref;
use std::ops::DerefMut;
-use std::sync::Mutex;
use super::transl8::FromV8;
use super::transl8::ToV8;
@@ -14,7 +13,7 @@ use crate::magic::transl8::impl_magic;
// allowing us to use a single type for familiarity
pub enum ZeroCopyBuf {
FromV8(V8Slice),
- ToV8(Mutex<Option<Box<[u8]>>>),
+ ToV8(Option<Box<[u8]>>),
// Variant of the ZeroCopyBuf than is never exposed to the JS.
// Generally used to pass Vec<u8> backed buffers to resource methods.
Temp(Vec<u8>),
@@ -30,7 +29,7 @@ impl Debug for ZeroCopyBuf {
impl ZeroCopyBuf {
pub fn empty() -> Self {
- ZeroCopyBuf::ToV8(Mutex::new(Some(vec![0_u8; 0].into_boxed_slice())))
+ ZeroCopyBuf::ToV8(Some(vec![0_u8; 0].into_boxed_slice()))
}
pub fn new_temp(vec: Vec<u8>) -> Self {
@@ -91,7 +90,7 @@ impl DerefMut for ZeroCopyBuf {
impl From<Box<[u8]>> for ZeroCopyBuf {
fn from(buf: Box<[u8]>) -> Self {
- ZeroCopyBuf::ToV8(Mutex::new(Some(buf)))
+ ZeroCopyBuf::ToV8(Some(buf))
}
}
@@ -112,9 +111,7 @@ impl ToV8 for ZeroCopyBuf {
value.into()
}
Self::Temp(_) => unreachable!(),
- Self::ToV8(x) => {
- x.get_mut().unwrap().take().expect("ZeroCopyBuf was empty")
- }
+ Self::ToV8(ref mut x) => x.take().expect("ZeroCopyBuf was empty"),
};
if buf.is_empty() {
@@ -151,13 +148,9 @@ impl From<ZeroCopyBuf> for bytes::Bytes {
fn from(zbuf: ZeroCopyBuf) -> bytes::Bytes {
match zbuf {
ZeroCopyBuf::FromV8(v) => v.into(),
- // WARNING(AaronO): potential footgun, but will disappear in future ZeroCopyBuf refactor
- ZeroCopyBuf::ToV8(v) => v
- .lock()
- .unwrap()
- .take()
- .expect("ZeroCopyBuf was empty")
- .into(),
+ ZeroCopyBuf::ToV8(mut v) => {
+ v.take().expect("ZeroCopyBuf was empty").into()
+ }
ZeroCopyBuf::Temp(v) => v.into(),
}
}