diff options
| author | Zeyla Hellyer <[email protected]> | 2018-08-01 12:50:45 -0700 |
|---|---|---|
| committer | Zeyla Hellyer <[email protected]> | 2018-08-01 12:51:56 -0700 |
| commit | 12d53214f39211a4c02026d9389b9aa2bfa8a5ee (patch) | |
| tree | 83217fb062a258e8ee91537999af31a1ae3c16b0 /src | |
| parent | De-cringe a comment (diff) | |
| download | serenity-12d53214f39211a4c02026d9389b9aa2bfa8a5ee.tar.xz serenity-12d53214f39211a4c02026d9389b9aa2bfa8a5ee.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.rs | 51 |
1 files changed, 5 insertions, 46 deletions
diff --git a/src/client/dispatch.rs b/src/client/dispatch.rs index 410ca76..c0d6e99 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>, @@ -149,20 +140,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); @@ -309,8 +286,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() { @@ -566,28 +541,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); |