aboutsummaryrefslogtreecommitdiff
path: root/src/client/dispatch.rs
diff options
context:
space:
mode:
authorAustin Hellyer <[email protected]>2016-12-02 11:21:56 -0800
committerAustin Hellyer <[email protected]>2016-12-02 11:21:56 -0800
commita5ea4c695c6dbff7a7111a1de00099053a4d55dd (patch)
tree1e311c1c93cb548cdc0391219f407754a5837c2a /src/client/dispatch.rs
parentAllow Role positions to be negative (diff)
downloadserenity-a5ea4c695c6dbff7a7111a1de00099053a4d55dd.tar.xz
serenity-a5ea4c695c6dbff7a7111a1de00099053a4d55dd.zip
Encase the event storage in an Arc<RwLock>
Commands should be dispatched more quickly with this patch. This brings down a (locally-tested) average "ping" command response from 278ms to 67ms.
Diffstat (limited to 'src/client/dispatch.rs')
-rw-r--r--src/client/dispatch.rs12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/client/dispatch.rs b/src/client/dispatch.rs
index f15b432..44832cc 100644
--- a/src/client/dispatch.rs
+++ b/src/client/dispatch.rs
@@ -1,4 +1,4 @@
-use std::sync::{Arc, Mutex};
+use std::sync::{Arc, Mutex, RwLock};
use std::thread;
use super::event_store::EventStore;
use super::login_type::LoginType;
@@ -15,7 +15,7 @@ use super::CACHE;
macro_rules! handler {
($field:ident, $event_store:ident) => {
- $event_store.lock()
+ $event_store.read()
.unwrap()
.$field
.as_ref()
@@ -47,7 +47,7 @@ pub fn dispatch(event: Event,
conn: Arc<Mutex<Shard>>,
framework: Arc<Mutex<Framework>>,
login_type: LoginType,
- event_store: Arc<Mutex<EventStore>>) {
+ event_store: Arc<RwLock<EventStore>>) {
match event {
Event::MessageCreate(event) => {
let context = context(Some(event.message.channel_id),
@@ -73,7 +73,7 @@ pub fn dispatch(event: Event,
pub fn dispatch(event: Event,
conn: Arc<Mutex<Shard>>,
login_type: LoginType,
- event_store: Arc<Mutex<EventStore>>) {
+ event_store: Arc<RwLock<EventStore>>) {
match event {
Event::MessageCreate(event) => {
let context = context(Some(event.message.channel_id),
@@ -89,7 +89,7 @@ pub fn dispatch(event: Event,
fn dispatch_message(context: Context,
message: Message,
- event_store: Arc<Mutex<EventStore>>) {
+ event_store: Arc<RwLock<EventStore>>) {
if let Some(ref handler) = handler!(on_message, event_store) {
let handler = handler.clone();
@@ -103,7 +103,7 @@ fn dispatch_message(context: Context,
fn handle_event(event: Event,
conn: Arc<Mutex<Shard>>,
login_type: LoginType,
- event_store: Arc<Mutex<EventStore>>) {
+ event_store: Arc<RwLock<EventStore>>) {
match event {
Event::CallCreate(event) => {
if let Some(ref handler) = handler!(on_call_create, event_store) {