aboutsummaryrefslogtreecommitdiff
path: root/src/internal
diff options
context:
space:
mode:
authorZeyla Hellyer <[email protected]>2017-10-10 20:08:11 -0700
committerZeyla Hellyer <[email protected]>2017-10-10 20:08:11 -0700
commit93e0a4215c915b98cf433ac6d0bcfbc60f0168ec (patch)
tree727111506d1f89cd8a511b8b79c102131222421f /src/internal
parentResume on resumable session invalidations (diff)
downloadserenity-93e0a4215c915b98cf433ac6d0bcfbc60f0168ec.tar.xz
serenity-93e0a4215c915b98cf433ac6d0bcfbc60f0168ec.zip
Switch to parking_lot::{Mutex, RwLock}
Switch to the `parking_lot` crate's implementations of `std::sync::Mutex` and `std::sync::RwLock`, which are more efficient. A writeup on why `parking_lot` is more efficient can be read here: <https://github.com/Amanieu/parking_lot> Upgrade path: Modify `mutex.lock().unwrap()` usage to `mutex.lock()` (not needing to unwrap or handle a result), and `rwlock.read().unwrap()`/`rwlock.write().unwrap()` usage to `rwlock.read()` and `rwlock.write()`. For example, modify: ```rust use serenity::CACHE; println!("{}", CACHE.read().unwrap().user.id); ``` to: ```rust use serenity::CACHE; println!("{}", CACHE.read().user.id); ```
Diffstat (limited to 'src/internal')
-rw-r--r--src/internal/rwlock_ext.rs13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/internal/rwlock_ext.rs b/src/internal/rwlock_ext.rs
index 8266cdf..6235370 100644
--- a/src/internal/rwlock_ext.rs
+++ b/src/internal/rwlock_ext.rs
@@ -1,3 +1,4 @@
+use parking_lot::RwLock as ParkingLotRwLock;
use std::sync::{Arc, RwLock};
pub trait RwLockExt<T> {
@@ -16,3 +17,15 @@ impl<T> RwLockExt<T> for Arc<RwLock<T>> {
f(&mut w)
}
}
+
+impl<T> RwLockExt<T> for Arc<ParkingLotRwLock<T>> {
+ fn with<Y, F: Fn(&T) -> Y>(&self, f: F) -> Y {
+ let r = self.read();
+ f(&r)
+ }
+
+ fn with_mut<Y, F: FnMut(&mut T) -> Y>(&self, mut f: F) -> Y {
+ let mut w = self.write();
+ f(&mut w)
+ }
+}