From 6b7f0e15ac59108ce517aacde32bfdbb3b5240b9 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Fri, 15 Jan 2021 06:50:35 -0500 Subject: [PATCH] fix always-on expiration checks checkAlwaysOnExpirationNoMutex was respecting registered status, but always-on clients were not considered registered at the time of the initial check, so they were being created regardless of expiration. --- irc/client.go | 4 ++-- irc/getters.go | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/irc/client.go b/irc/client.go index d6408711..0f8b2895 100644 --- a/irc/client.go +++ b/irc/client.go @@ -443,7 +443,7 @@ func (server *Server) AddAlwaysOnClient(account ClientAccount, channelToModes ma nextSessionID: 1, } - if client.checkAlwaysOnExpirationNoMutex(config) { + if client.checkAlwaysOnExpirationNoMutex(config, true) { server.logger.Debug("accounts", "always-on client not created due to expiration", account.Name) return } @@ -1403,7 +1403,7 @@ func (client *Client) destroy(session *Session) { alwaysOn := registered && client.alwaysOn // if we hit always-on-expiration, confirm the expiration and then proceed as though // always-on is disabled: - if alwaysOn && session == nil && client.checkAlwaysOnExpirationNoMutex(config) { + if alwaysOn && session == nil && client.checkAlwaysOnExpirationNoMutex(config, false) { quitMessage = "Timed out due to inactivity" alwaysOn = false client.alwaysOn = false diff --git a/irc/getters.go b/irc/getters.go index 85f98220..2be4dca2 100644 --- a/irc/getters.go +++ b/irc/getters.go @@ -452,11 +452,11 @@ func (client *Client) Realname() string { func (client *Client) IsExpiredAlwaysOn(config *Config) (result bool) { client.stateMutex.Lock() defer client.stateMutex.Unlock() - return client.checkAlwaysOnExpirationNoMutex(config) + return client.checkAlwaysOnExpirationNoMutex(config, false) } -func (client *Client) checkAlwaysOnExpirationNoMutex(config *Config) (result bool) { - if !(client.registered && client.alwaysOn) { +func (client *Client) checkAlwaysOnExpirationNoMutex(config *Config, ignoreRegistration bool) (result bool) { + if !((client.registered || ignoreRegistration) && client.alwaysOn) { return false } deadline := time.Duration(config.Accounts.Multiclient.AlwaysOnExpiration)