From c63fd6d1f2affbd7dee32b8f4da3529a398f6277 Mon Sep 17 00:00:00 2001 From: Michael Sippel Date: Tue, 30 Mar 2021 22:47:05 +0200 Subject: [PATCH] script to enable/disable no_deadlocks::RwLock instead of std::sync::RwLock --- Cargo.toml | 1 + enable_nodeadlock.sh | 16 ++++++++++++++++ src/cell_layout.rs | 3 ++- src/core/observer.rs | 5 +++-- src/core/port.rs | 4 +++- src/core/view.rs | 3 ++- src/grid/offset.rs | 5 ++--- src/index/map_item.rs | 3 ++- src/index/map_key.rs | 3 ++- src/index/mod.rs | 3 ++- src/leveled_term_view.rs | 3 ++- src/main.rs | 5 ++--- src/projection.rs | 3 ++- src/sequence/flatten.rs | 3 ++- src/sequence/mod.rs | 3 ++- src/sequence/seq2idx.rs | 3 ++- src/sequence/vec_buffer.rs | 3 ++- src/singleton/buffer.rs | 3 ++- src/singleton/mod.rs | 3 ++- src/string_editor.rs | 7 +++---- src/terminal/compositor.rs | 3 ++- src/terminal/terminal.rs | 3 ++- 22 files changed, 60 insertions(+), 28 deletions(-) create mode 100644 enable_nodeadlock.sh diff --git a/Cargo.toml b/Cargo.toml index c9d0fc0..d5d3936 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ name = "NeStEd" version = "0.1.0" [dependencies] +no_deadlocks = "*" cgmath = "0.17.0" termion = "1.5.5" signal-hook = "0.3.1" diff --git a/enable_nodeadlock.sh b/enable_nodeadlock.sh new file mode 100644 index 0000000..d26f0ee --- /dev/null +++ b/enable_nodeadlock.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +enable_no_deadlock() { + for f in $(find src -name *.rs) + do + sed -ibak -E "s/std::sync::RwLock(;|,|$)/no_deadlocks::RwLock\1/g" $f + done +} + +disable_no_deadlock() { + for f in $(find src -name *.rs) + do + sed -ibak -E "s/no_deadlocks::RwLock(;|,|$)/std::sync::RwLock\1/g" $f + done +} + diff --git a/src/cell_layout.rs b/src/cell_layout.rs index 3cdd038..ea4de0b 100644 --- a/src/cell_layout.rs +++ b/src/cell_layout.rs @@ -1,11 +1,12 @@ use { async_std::stream::StreamExt, std::{ - sync::{Arc, RwLock}, + sync::Arc, collections::HashMap, cmp::{min, max} }, cgmath::{Point2, Vector2}, + std::sync::RwLock, crate::{ core::{InnerViewPort, OuterViewPort, Observer, ObserverExt, ObserverBroadcast, ChannelReceiver, ChannelSender}, terminal::{TerminalView, TerminalAtom}, diff --git a/src/core/observer.rs b/src/core/observer.rs index 4a17aad..dfa0afc 100644 --- a/src/core/observer.rs +++ b/src/core/observer.rs @@ -1,8 +1,9 @@ use { crate::core::View, std::{ - sync::{Arc, Weak, RwLock} - } + sync::{Arc, Weak} + }, + std::sync::RwLock }; /*\ diff --git a/src/core/port.rs b/src/core/port.rs index dac9cc6..5ee9220 100644 --- a/src/core/port.rs +++ b/src/core/port.rs @@ -1,5 +1,7 @@ use { - std::sync::{Arc, RwLock}, + std::sync::Arc, + std::any::Any, + std::sync::RwLock, crate::core::{ View, Observer, diff --git a/src/core/view.rs b/src/core/view.rs index bfe8274..1b5a33c 100644 --- a/src/core/view.rs +++ b/src/core/view.rs @@ -11,7 +11,8 @@ pub trait View : Send + Sync { //<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>> -use std::sync::{Arc, RwLock}; +use std::sync::Arc; +use std::sync::RwLock; impl View for RwLock { type Msg = V::Msg; diff --git a/src/grid/offset.rs b/src/grid/offset.rs index 459640d..1b406ad 100644 --- a/src/grid/offset.rs +++ b/src/grid/offset.rs @@ -1,8 +1,7 @@ use { - std::{ - sync::{Arc, RwLock} - }, + std::sync::Arc, cgmath::{Point2, Vector2}, + std::sync::RwLock, crate::{ core::{ View, diff --git a/src/index/map_item.rs b/src/index/map_item.rs index 4493d59..6cee0ee 100644 --- a/src/index/map_item.rs +++ b/src/index/map_item.rs @@ -1,8 +1,9 @@ pub use { std::{ - sync::{Arc, RwLock}, + sync::Arc, boxed::Box }, + std::sync::RwLock, crate::{ core::{ View, diff --git a/src/index/map_key.rs b/src/index/map_key.rs index 3b33f2d..b2d450e 100644 --- a/src/index/map_key.rs +++ b/src/index/map_key.rs @@ -1,8 +1,9 @@ pub use { std::{ - sync::{Arc, RwLock}, + sync::Arc, boxed::Box }, + std::sync::RwLock, crate::{ core::{ View, diff --git a/src/index/mod.rs b/src/index/mod.rs index d8e787d..ddf7a99 100644 --- a/src/index/mod.rs +++ b/src/index/mod.rs @@ -4,9 +4,10 @@ pub mod map_key; use { std::{ - sync::{Arc, RwLock}, + sync::Arc, ops::Deref, }, + std::sync::RwLock, crate::core::View }; diff --git a/src/leveled_term_view.rs b/src/leveled_term_view.rs index 5afc27d..8686502 100644 --- a/src/leveled_term_view.rs +++ b/src/leveled_term_view.rs @@ -1,8 +1,9 @@ use { std::{ - sync::{Arc, RwLock}, + sync::{Arc}, collections::HashSet }, + std::sync::RwLock, cgmath::Point2, crate::{ core::{ViewPort, Observer, ObserverExt, ObserverBroadcast, InnerViewPort, OuterViewPort}, diff --git a/src/main.rs b/src/main.rs index bc5fc5a..b0b40c6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,9 +14,8 @@ pub mod leveled_term_view; use { async_std::{task}, - std::{ - sync::{Arc, RwLock} - }, + std::sync::{Arc}, + std::sync::RwLock, cgmath::{Vector2, Point2}, termion::event::{Event, Key}, crate::{ diff --git a/src/projection.rs b/src/projection.rs index 8d8a578..45f3391 100644 --- a/src/projection.rs +++ b/src/projection.rs @@ -2,11 +2,12 @@ use { std::{ cmp::{max}, any::Any, - sync::{Arc, RwLock, Weak} + sync::{Arc, Weak}, }, async_std::{ stream::StreamExt }, + std::sync::RwLock, crate::{ core::{View, Observer, ObserverExt, OuterViewPort, channel::{channel, ChannelData, ChannelSender, ChannelReceiver}}, singleton::{SingletonView}, diff --git a/src/sequence/flatten.rs b/src/sequence/flatten.rs index 713b57e..ab1dec9 100644 --- a/src/sequence/flatten.rs +++ b/src/sequence/flatten.rs @@ -1,9 +1,10 @@ use { async_std::stream::StreamExt, std::{ - sync::{Arc, Weak, RwLock}, + sync::{Arc, Weak}, collections::{HashMap, HashSet} }, + std::sync::RwLock, crate::{ core::{ View, Observer, ObserverExt, ObserverBroadcast, diff --git a/src/sequence/mod.rs b/src/sequence/mod.rs index f10a1ea..2dda5fa 100644 --- a/src/sequence/mod.rs +++ b/src/sequence/mod.rs @@ -22,9 +22,10 @@ pub trait SequenceView : View { //<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>> use std::{ - sync::{Arc, RwLock}, + sync::Arc, ops::{Deref} }; +use std::sync::RwLock; impl SequenceView for RwLock { type Item = V::Item; diff --git a/src/sequence/seq2idx.rs b/src/sequence/seq2idx.rs index 0f0ad0b..0967e4e 100644 --- a/src/sequence/seq2idx.rs +++ b/src/sequence/seq2idx.rs @@ -1,7 +1,8 @@ use { std::{ - sync::{Arc, RwLock} + sync::Arc }, + std::sync::RwLock, crate::{ core::{ View, Observer, ObserverExt, ObserverBroadcast, diff --git a/src/sequence/vec_buffer.rs b/src/sequence/vec_buffer.rs index 23a40fe..220d52d 100644 --- a/src/sequence/vec_buffer.rs +++ b/src/sequence/vec_buffer.rs @@ -1,8 +1,9 @@ use { std::{ - sync::{Arc, RwLock}, + sync::Arc, ops::{Deref, DerefMut} }, + std::sync::RwLock, crate::{ core::{View, Observer, ObserverExt, ObserverBroadcast, ViewPort, InnerViewPort, OuterViewPort}, sequence::SequenceView, diff --git a/src/singleton/buffer.rs b/src/singleton/buffer.rs index 4cac1aa..1ff3490 100644 --- a/src/singleton/buffer.rs +++ b/src/singleton/buffer.rs @@ -1,7 +1,8 @@ use { std::{ - sync::{Arc, RwLock} + sync::{Arc} }, + std::sync::RwLock, crate::{ core::{ Observer, diff --git a/src/singleton/mod.rs b/src/singleton/mod.rs index 48e95f9..932b214 100644 --- a/src/singleton/mod.rs +++ b/src/singleton/mod.rs @@ -3,9 +3,10 @@ pub mod buffer; use { std::{ - sync::{Arc, RwLock}, + sync::Arc, ops::Deref }, + std::sync::RwLock, crate::core::{View} }; diff --git a/src/string_editor.rs b/src/string_editor.rs index 6df881a..addeecf 100644 --- a/src/string_editor.rs +++ b/src/string_editor.rs @@ -1,7 +1,5 @@ use { - std::{ - sync::{RwLock} - }, + std::sync::RwLock, crate::{ core::{ViewPort, OuterViewPort}, singleton::{SingletonView, SingletonBuffer}, @@ -101,12 +99,13 @@ impl StringEditor { pub mod insert_view { use { std::{ - sync::{Arc, RwLock}, + sync::Arc, cmp::{min, max}, any::Any, collections::HashSet }, cgmath::Point2, + std::sync::RwLock, crate::{ core::{View, Observer, ObserverExt, ObserverBroadcast, OuterViewPort, InnerViewPort}, terminal::{TerminalAtom, TerminalStyle, TerminalView}, diff --git a/src/terminal/compositor.rs b/src/terminal/compositor.rs index 30eec82..9c15790 100644 --- a/src/terminal/compositor.rs +++ b/src/terminal/compositor.rs @@ -1,8 +1,9 @@ use { std::{ - sync::{Arc, Weak, RwLock}, + sync::{Arc, Weak}, collections::HashMap }, + std::sync::RwLock, cgmath::Point2, crate::{ core::{InnerViewPort, OuterViewPort, Observer, ObserverExt, ObserverBroadcast}, diff --git a/src/terminal/terminal.rs b/src/terminal/terminal.rs index c50a376..52aa0ee 100644 --- a/src/terminal/terminal.rs +++ b/src/terminal/terminal.rs @@ -1,9 +1,10 @@ use { std::{ - sync::{Arc, RwLock}, + sync::Arc, io::{Write, stdout, stdin}, collections::HashSet }, + std::sync::RwLock, async_std::{ stream::StreamExt, task