diff options
| author | Austin Hellyer <[email protected]> | 2016-12-02 11:21:56 -0800 |
|---|---|---|
| committer | Austin Hellyer <[email protected]> | 2016-12-02 11:21:56 -0800 |
| commit | a5ea4c695c6dbff7a7111a1de00099053a4d55dd (patch) | |
| tree | 1e311c1c93cb548cdc0391219f407754a5837c2a /src/client/dispatch.rs | |
| parent | Allow Role positions to be negative (diff) | |
| download | serenity-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.rs | 12 |
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) { |