Reduce lock time on session create, better disconnect checking in IPC loop

main
DaXcess 2023-02-02 12:50:39 +00:00
parent ff0e79d1af
commit edf93c693e
No known key found for this signature in database
GPG Key ID: CF78CC72F0FD5EAD
2 changed files with 14 additions and 8 deletions

View File

@ -52,16 +52,10 @@ impl InnerSessionManager {
/// Creates a new session for the given user in the given guild.
pub async fn create_session(
&mut self,
ctx: &Context,
session: SpoticordSession,
guild_id: GuildId,
channel_id: ChannelId,
text_channel_id: ChannelId,
owner_id: UserId,
) -> Result<(), SessionCreateError> {
// Create session first to make sure locks are kept for as little time as possible
let session =
SpoticordSession::new(ctx, guild_id, channel_id, text_channel_id, owner_id).await?;
self.sessions.insert(guild_id, session);
self.owner_map.insert(owner_id, guild_id);
@ -139,11 +133,15 @@ impl SessionManager {
text_channel_id: ChannelId,
owner_id: UserId,
) -> Result<(), SessionCreateError> {
// Create session first to make sure locks are kept for as little time as possible
let session =
SpoticordSession::new(ctx, guild_id, channel_id, text_channel_id, owner_id).await?;
self
.0
.write()
.await
.create_session(ctx, guild_id, channel_id, text_channel_id, owner_id)
.create_session(session, guild_id, owner_id)
.await
}

View File

@ -255,6 +255,14 @@ impl SpoticordSession {
// Required for IpcPacket::TrackChange to work
tokio::task::yield_now().await;
// Check if the session has been disconnected
if {
let inner = inner.read().await;
inner.disconnected
} {
break;
}
let msg = match client.try_recv() {
Ok(msg) => msg,
Err(why) => {