refactor: replace all RwLock with Mutex

This commit is contained in:
Nova
2022-06-21 04:53:37 -04:00
parent ff118d4e1f
commit 9880b6ef3f
4 changed files with 30 additions and 30 deletions

View File

@@ -1,25 +1,25 @@
use crate::nodes::core::Node; use crate::nodes::core::Node;
use parking_lot::RwLock; use parking_lot::Mutex;
use std::sync::Weak; use std::sync::Weak;
#[derive(Default)] #[derive(Default)]
pub struct LifeLinkedNodeList { pub struct LifeLinkedNodeList {
nodes: RwLock<Vec<Weak<Node>>>, nodes: Mutex<Vec<Weak<Node>>>,
} }
impl LifeLinkedNodeList { impl LifeLinkedNodeList {
pub fn add(&self, node: Weak<Node>) { pub fn add(&self, node: Weak<Node>) {
self.nodes.write().push(node); self.nodes.lock().push(node);
} }
pub fn clear(&self) { pub fn clear(&self) {
self.nodes self.nodes
.read() .lock()
.iter() .iter()
.filter_map(|node| node.upgrade()) .filter_map(|node| node.upgrade())
.for_each(|node| { .for_each(|node| {
node.destroy(); node.destroy();
}); });
self.nodes.write().clear(); self.nodes.lock().clear();
} }
} }
impl Drop for LifeLinkedNodeList { impl Drop for LifeLinkedNodeList {

View File

@@ -1,9 +1,9 @@
use anyhow::{anyhow, Result}; use anyhow::{anyhow, Result};
use parking_lot::RwLock; use parking_lot::Mutex;
use slab::Slab; use slab::Slab;
use std::sync::{Arc, Weak}; use std::sync::{Arc, Weak};
pub struct Registry<T>(RwLock<Slab<Weak<T>>>); pub struct Registry<T>(Mutex<Slab<Weak<T>>>);
impl<T> Registry<T> { impl<T> Registry<T> {
pub fn add(&self, t: T) -> Arc<T> { pub fn add(&self, t: T) -> Arc<T> {
@@ -12,21 +12,21 @@ impl<T> Registry<T> {
t_arc t_arc
} }
pub fn add_raw(&self, t: &Arc<T>) { pub fn add_raw(&self, t: &Arc<T>) {
self.0.write().insert(Arc::downgrade(t)); self.0.lock().insert(Arc::downgrade(t));
} }
pub fn get_valid_contents(&self) -> Vec<Arc<T>> { pub fn get_valid_contents(&self) -> Vec<Arc<T>> {
self.0 self.0
.read() .lock()
.iter() .iter()
.filter_map(|(_, item)| item.upgrade()) .filter_map(|(_, item)| item.upgrade())
.collect() .collect()
} }
pub fn remove(&self, t: &T) { pub fn remove(&self, t: &T) {
for item in self.0.read().iter() { for item in self.0.lock().iter() {
let (idx, item) = item; let (idx, item) = item;
if let Some(item) = item.upgrade() { if let Some(item) = item.upgrade() {
if std::ptr::eq(item.as_ref(), t) { if std::ptr::eq(item.as_ref(), t) {
self.0.write().remove(idx); self.0.lock().remove(idx);
break; break;
} }
} }
@@ -36,6 +36,6 @@ impl<T> Registry<T> {
impl<T> Default for Registry<T> { impl<T> Default for Registry<T> {
fn default() -> Self { fn default() -> Self {
Registry::<T>(RwLock::new(Slab::new())) Registry::<T>(Mutex::new(Slab::new()))
} }
} }

View File

@@ -9,7 +9,7 @@ use glam::{vec3a, Mat4};
use lazy_static::lazy_static; use lazy_static::lazy_static;
use libstardustxr::flex::flexbuffer_from_vector_arguments; use libstardustxr::flex::flexbuffer_from_vector_arguments;
use libstardustxr::{flex_to_quat, flex_to_vec3}; use libstardustxr::{flex_to_quat, flex_to_vec3};
use parking_lot::RwLock; use parking_lot::Mutex;
use std::sync::{Arc, Weak}; use std::sync::{Arc, Weak};
lazy_static! { lazy_static! {
@@ -65,7 +65,7 @@ fn mask_get_map_at_root(binary: &[u8]) -> Result<flexbuffers::MapReader<&[u8]>>
#[derive(Default)] #[derive(Default)]
pub struct PulseSender { pub struct PulseSender {
mask: RwLock<Mask>, mask: Mutex<Mask>,
aliases: LifeLinkedNodeList, aliases: LifeLinkedNodeList,
} }
impl PulseSender { impl PulseSender {
@@ -91,7 +91,7 @@ impl PulseSender {
.get() .get()
.unwrap() .unwrap()
.mask .mask
.write() .lock()
.set_mask(data.to_vec(), mask_get_map_at_root); .set_mask(data.to_vec(), mask_get_map_at_root);
Ok(()) Ok(())
} }
@@ -112,7 +112,7 @@ impl PulseSender {
let mut distance_sorted_receivers: Vec<(f32, &PulseReceiver)> = valid_receivers let mut distance_sorted_receivers: Vec<(f32, &PulseReceiver)> = valid_receivers
.iter() .iter()
.filter(|receiver| receiver.get_field().is_some()) .filter(|receiver| receiver.get_field().is_some())
.filter(|receiver| mask_matches(&*sender.mask.read(), &*receiver.mask.read())) .filter(|receiver| mask_matches(&*sender.mask.lock(), &*receiver.mask.lock()))
.map(|receiver| { .map(|receiver| {
( (
receiver receiver
@@ -158,7 +158,7 @@ impl Drop for PulseSender {
pub struct PulseReceiver { pub struct PulseReceiver {
uid: String, uid: String,
node: Weak<Node>, node: Weak<Node>,
pub mask: RwLock<Mask>, pub mask: Mutex<Mask>,
field: Weak<Field>, field: Weak<Field>,
} }
impl<'a> PulseReceiver { impl<'a> PulseReceiver {
@@ -188,7 +188,7 @@ impl<'a> PulseReceiver {
node.pulse_receiver.get().is_some(), node.pulse_receiver.get().is_some(),
"Internal: Node does not have a pulse receiver aspect" "Internal: Node does not have a pulse receiver aspect"
); );
let receiver_mask = node.pulse_receiver.get().unwrap().mask.read(); let receiver_mask = node.pulse_receiver.get().unwrap().mask.lock();
let data_mask = Mask { let data_mask = Mask {
binary: data.to_vec(), binary: data.to_vec(),
get_fn: mask_get_map_at_root, get_fn: mask_get_map_at_root,
@@ -211,7 +211,7 @@ impl<'a> PulseReceiver {
.get() .get()
.unwrap() .unwrap()
.mask .mask
.write() .lock()
.set_mask(data.to_vec(), mask_get_map_at_root); .set_mask(data.to_vec(), mask_get_map_at_root);
Ok(()) Ok(())
} }

View File

@@ -5,13 +5,13 @@ use glam::{Mat4, Quat, Vec3};
use libstardustxr::flex::flexbuffer_from_vector_arguments; use libstardustxr::flex::flexbuffer_from_vector_arguments;
use libstardustxr::push_to_vec; use libstardustxr::push_to_vec;
use libstardustxr::{flex_to_quat, flex_to_vec3}; use libstardustxr::{flex_to_quat, flex_to_vec3};
use parking_lot::RwLock; use parking_lot::Mutex;
use std::sync::Arc; use std::sync::Arc;
pub struct Spatial { pub struct Spatial {
// node: Weak<Node>, // node: Weak<Node>,
parent: RwLock<Option<Arc<Spatial>>>, parent: Mutex<Option<Arc<Spatial>>>,
transform: RwLock<Mat4>, transform: Mutex<Mat4>,
} }
impl Spatial { impl Spatial {
@@ -26,8 +26,8 @@ impl Spatial {
); );
let spatial = Spatial { let spatial = Spatial {
// node: node.downgrade(), // node: node.downgrade(),
parent: RwLock::new(parent), parent: Mutex::new(parent),
transform: RwLock::new(transform), transform: Mutex::new(transform),
}; };
node.add_local_method("getTransform", Spatial::get_transform_flex); node.add_local_method("getTransform", Spatial::get_transform_flex);
node.add_local_signal("setTransform", Spatial::set_transform_flex); node.add_local_signal("setTransform", Spatial::set_transform_flex);
@@ -43,16 +43,16 @@ impl Spatial {
} }
pub fn local_transform(&self) -> Mat4 { pub fn local_transform(&self) -> Mat4 {
*self.transform.read() *self.transform.lock()
} }
pub fn global_transform(&self) -> Mat4 { pub fn global_transform(&self) -> Mat4 {
match self.parent.read().clone() { match self.parent.lock().clone() {
Some(value) => value.global_transform() * *self.transform.read(), Some(value) => value.global_transform() * *self.transform.lock(),
None => *self.transform.read(), None => *self.transform.lock(),
} }
} }
pub fn set_local_transform(&self, transform: Mat4) { pub fn set_local_transform(&self, transform: Mat4) {
*self.transform.write() = transform; *self.transform.lock() = transform;
} }
pub fn set_local_transform_components( pub fn set_local_transform_components(
&self, &self,
@@ -62,7 +62,7 @@ impl Spatial {
scl: Option<Vec3>, scl: Option<Vec3>,
) { ) {
let reference_to_parent_transform = let reference_to_parent_transform =
Spatial::space_to_space_matrix(reference_space, self.parent.read().as_deref()); Spatial::space_to_space_matrix(reference_space, self.parent.lock().as_deref());
let mut local_transform_in_reference_space = let mut local_transform_in_reference_space =
reference_to_parent_transform.inverse() * self.local_transform(); reference_to_parent_transform.inverse() * self.local_transform();
let (mut reference_space_scl, mut reference_space_rot, mut reference_space_pos) = let (mut reference_space_scl, mut reference_space_rot, mut reference_space_pos) =