aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZeyla Hellyer <[email protected]>2018-08-01 12:50:45 -0700
committerZeyla Hellyer <[email protected]>2018-08-01 12:53:45 -0700
commitc56d155c2de81d0f504e4460f124c75ac190cecf (patch)
tree1dda175dc5500d527ef47b2ee801a841c4c67528 /src
parentDe-cringe a comment (diff)
downloadserenity-c56d155c2de81d0f504e4460f124c75ac190cecf.tar.xz
serenity-c56d155c2de81d0f504e4460f124c75ac190cecf.zip
Don't delay Ready with cache enabled
When the cache is enabled, don't delay the Ready until all guilds have been received. This never really worked in the first place and duplicates the "cached" logic that fires when all guilds have been received. This presumably fixes the "silent death" bug, as this appears to stall the thread on certain conditions.
Diffstat (limited to 'src')
-rw-r--r--src/client/dispatch.rs51
1 files changed, 5 insertions, 46 deletions
diff --git a/src/client/dispatch.rs b/src/client/dispatch.rs
index 1cf513f..d6249a9 100644
--- a/src/client/dispatch.rs
+++ b/src/client/dispatch.rs
@@ -15,14 +15,10 @@ use std::sync::mpsc::Sender;
use threadpool::ThreadPool;
use typemap::ShareMap;
-#[cfg(feature = "cache")]
-use chrono::{Timelike, Utc};
#[cfg(feature = "framework")]
use framework::Framework;
#[cfg(feature = "cache")]
use model::id::GuildId;
-#[cfg(feature = "cache")]
-use std::{thread, time};
#[cfg(feature = "cache")]
use super::CACHE;
@@ -38,11 +34,6 @@ macro_rules! update {
};
}
-#[cfg(feature = "cache")]
-macro_rules! now {
- () => (Utc::now().time().second() * 1000)
-}
-
fn context(
data: &Arc<Mutex<ShareMap>>,
runner_tx: &Sender<InterMessage>,
@@ -150,20 +141,6 @@ fn handle_event<H: EventHandler + Send + Sync + 'static>(
threadpool: &ThreadPool,
shard_id: u64,
) {
- #[cfg(feature = "cache")]
- let mut last_guild_create_time = now!();
-
- #[cfg(feature = "cache")]
- let wait_for_guilds = move || -> ::Result<()> {
- let unavailable_guilds = CACHE.read().unavailable_guilds.len();
-
- while unavailable_guilds != 0 && (now!() < last_guild_create_time + 2000) {
- thread::sleep(time::Duration::from_millis(500));
- }
-
- Ok(())
- };
-
match event {
DispatchEvent::Client(ClientEvent::ShardStageUpdate(event)) => {
let context = context(data, runner_tx, shard_id);
@@ -310,8 +287,6 @@ fn handle_event<H: EventHandler + Send + Sync + 'static>(
#[cfg(feature = "cache")]
{
- last_guild_create_time = now!();
-
let cache = CACHE.read();
if cache.unavailable_guilds.is_empty() {
@@ -567,28 +542,12 @@ fn handle_event<H: EventHandler + Send + Sync + 'static>(
DispatchEvent::Model(Event::Ready(mut event)) => {
update!(event);
- let event_handler = Arc::clone(event_handler);
-
- feature_cache! {{
- last_guild_create_time = now!();
-
- let _ = wait_for_guilds()
- .map(move |_| {
- let context = context(data, runner_tx, shard_id);
- let event_handler = Arc::clone(&event_handler);
-
- threadpool.execute(move || {
- event_handler.ready(context, event.ready);
- });
- });
- } else {
- let context = context(data, runner_tx, shard_id);
- let event_handler = Arc::clone(&event_handler);
+ let context = context(data, runner_tx, shard_id);
+ let event_handler = Arc::clone(&event_handler);
- threadpool.execute(move || {
- event_handler.ready(context, event.ready);
- });
- }}
+ threadpool.execute(move || {
+ event_handler.ready(context, event.ready);
+ });
},
DispatchEvent::Model(Event::Resumed(mut event)) => {
let context = context(data, runner_tx, shard_id);