Browse Source

Fix delete-session not deleting all cached state

Tulir Asokan 4 years ago
parent
commit
f21f57f09f
2 changed files with 5 additions and 1 deletions
  1. 1 0
      commands.go
  2. 4 1
      user.go

+ 1 - 0
commands.go

@@ -458,6 +458,7 @@ func (handler *CommandHandler) CommandDeleteSession(ce *CommandEvent) {
 		ce.Reply("Nothing to purge: no session information stored and no active connection.")
 		ce.Reply("Nothing to purge: no session information stored and no active connection.")
 		return
 		return
 	}
 	}
+	ce.User.removeFromJIDMap()
 	ce.User.SetSession(nil)
 	ce.User.SetSession(nil)
 	if ce.User.Conn != nil {
 	if ce.User.Conn != nil {
 		_, _ = ce.User.Conn.Disconnect()
 		_, _ = ce.User.Conn.Disconnect()

+ 4 - 1
user.go

@@ -107,7 +107,10 @@ func (user *User) addToJIDMap() {
 
 
 func (user *User) removeFromJIDMap() {
 func (user *User) removeFromJIDMap() {
 	user.bridge.usersLock.Lock()
 	user.bridge.usersLock.Lock()
-	delete(user.bridge.usersByJID, user.JID)
+	jidUser, ok := user.bridge.usersByJID[user.JID]
+	if ok && user == jidUser {
+		delete(user.bridge.usersByJID, user.JID)
+	}
 	user.bridge.usersLock.Unlock()
 	user.bridge.usersLock.Unlock()
 	user.bridge.Metrics.TrackLoginState(user.JID, false)
 	user.bridge.Metrics.TrackLoginState(user.JID, false)
 }
 }