summaryrefslogtreecommitdiffstats
path: root/src/plugins/factoids
diff options
context:
space:
mode:
authorJokler <jokler.contact@gmail.com>2018-03-21 16:40:15 +0100
committerJokler <jokler.contact@gmail.com>2018-03-21 16:40:15 +0100
commit516ee046784acb4a6dc97b844ff3af9a54308e30 (patch)
tree672f422c6817734c7404ec26569a366319c1a183 /src/plugins/factoids
parent48f547826edd9db9b94376f240a785d8a19a993d (diff)
downloadfrippy-516ee046784acb4a6dc97b844ff3af9a54308e30.tar.gz
frippy-516ee046784acb4a6dc97b844ff3af9a54308e30.zip
Replace every Mutex with RwLock
Diffstat (limited to 'src/plugins/factoids')
-rw-r--r--src/plugins/factoids/database.rs2
-rw-r--r--src/plugins/factoids/mod.rs35
2 files changed, 14 insertions, 23 deletions
diff --git a/src/plugins/factoids/database.rs b/src/plugins/factoids/database.rs
index b1fe8dd..7788d7c 100644
--- a/src/plugins/factoids/database.rs
+++ b/src/plugins/factoids/database.rs
@@ -40,7 +40,7 @@ pub struct NewFactoid<'a> {
pub created: NaiveDateTime,
}
-pub trait Database: Send {
+pub trait Database: Send + Sync {
fn insert_factoid(&mut self, factoid: &NewFactoid) -> Result<(), FactoidsError>;
fn get_factoid(&self, name: &str, idx: i32) -> Result<Factoid, FactoidsError>;
fn delete_factoid(&mut self, name: &str, idx: i32) -> Result<(), FactoidsError>;
diff --git a/src/plugins/factoids/mod.rs b/src/plugins/factoids/mod.rs
index d09313c..10e512a 100644
--- a/src/plugins/factoids/mod.rs
+++ b/src/plugins/factoids/mod.rs
@@ -2,9 +2,9 @@ extern crate rlua;
use std::fmt;
use std::str::FromStr;
-use std::sync::Mutex;
use self::rlua::prelude::*;
use irc::client::prelude::*;
+use antidote::RwLock;
use time;
use chrono::NaiveDateTime;
@@ -25,22 +25,13 @@ static LUA_SANDBOX: &'static str = include_str!("sandbox.lua");
#[derive(PluginName)]
pub struct Factoids<T: Database> {
- factoids: Mutex<T>,
-}
-
-macro_rules! try_lock {
- ( $m:expr ) => {
- match $m.lock() {
- Ok(guard) => guard,
- Err(poisoned) => poisoned.into_inner(),
- }
- }
+ factoids: RwLock<T>,
}
impl<T: Database> Factoids<T> {
pub fn new(db: T) -> Factoids<T> {
Factoids {
- factoids: Mutex::new(db),
+ factoids: RwLock::new(db),
}
}
@@ -50,7 +41,7 @@ impl<T: Database> Factoids<T> {
content: &str,
author: &str,
) -> Result<&str, FactoidsError> {
- let count = try_lock!(self.factoids).count_factoids(name)?;
+ let count = self.factoids.read().count_factoids(name)?;
let tm = time::now().to_timespec();
let factoid = database::NewFactoid {
@@ -61,7 +52,7 @@ impl<T: Database> Factoids<T> {
created: NaiveDateTime::from_timestamp(tm.sec, 0u32),
};
- Ok(try_lock!(self.factoids)
+ Ok(self.factoids.write()
.insert_factoid(&factoid)
.map(|()| "Successfully added!")?)
}
@@ -95,9 +86,9 @@ impl<T: Database> Factoids<T> {
}
let name = command.tokens.remove(0);
- let count = try_lock!(self.factoids).count_factoids(&name)?;
+ let count = self.factoids.read().count_factoids(&name)?;
- match try_lock!(self.factoids).delete_factoid(&name, count - 1) {
+ match self.factoids.write().delete_factoid(&name, count - 1) {
Ok(()) => Ok("Successfully removed"),
Err(e) => Err(e)?,
}
@@ -108,7 +99,7 @@ impl<T: Database> Factoids<T> {
0 => Err(ErrorKind::InvalidCommand)?,
1 => {
let name = &command.tokens[0];
- let count = try_lock!(self.factoids).count_factoids(name)?;
+ let count = self.factoids.read().count_factoids(name)?;
if count < 1 {
Err(ErrorKind::NotFound)?;
@@ -127,7 +118,7 @@ impl<T: Database> Factoids<T> {
}
};
- let factoid = try_lock!(self.factoids)
+ let factoid = self.factoids.read()
.get_factoid(name, idx)
.context(ErrorKind::NotFound)?;
@@ -141,7 +132,7 @@ impl<T: Database> Factoids<T> {
0 => Err(ErrorKind::InvalidCommand)?,
1 => {
let name = &command.tokens[0];
- let count = try_lock!(self.factoids).count_factoids(name)?;
+ let count = self.factoids.read().count_factoids(name)?;
Ok(match count {
0 => Err(ErrorKind::NotFound)?,
@@ -152,7 +143,7 @@ impl<T: Database> Factoids<T> {
_ => {
let name = &command.tokens[0];
let idx = i32::from_str(&command.tokens[1]).context(ErrorKind::InvalidIndex)?;
- let factoid = try_lock!(self.factoids).get_factoid(name, idx)?;
+ let factoid = self.factoids.read().get_factoid(name, idx)?;
Ok(format!(
"{}: Added by {} at {} UTC",
@@ -167,8 +158,8 @@ impl<T: Database> Factoids<T> {
Err(ErrorKind::InvalidIndex)?
} else {
let name = command.tokens.remove(0);
- let count = try_lock!(self.factoids).count_factoids(&name)?;
- let factoid = try_lock!(self.factoids).get_factoid(&name, count - 1)?;
+ let count = self.factoids.read().count_factoids(&name)?;
+ let factoid = self.factoids.read().get_factoid(&name, count - 1)?;
let content = factoid.content;
let value = if content.starts_with('>') {