From fc743f1ad2a377f096ad95625d745af17a7b508c Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Fri, 17 Feb 2023 15:51:01 +0200 Subject: [PATCH] Don't use goroutine for queuing bridge states --- user.go | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/user.go b/user.go index dfbe159..de1592a 100644 --- a/user.go +++ b/user.go @@ -712,7 +712,7 @@ func (user *User) phoneSeen(ts time.Time) { } else if !user.PhoneRecentlySeen(false) { if user.BridgeState.GetPrev().Error == WAPhoneOffline && user.IsConnected() { user.log.Debugfln("Saw phone after current bridge state said it has been offline, switching state back to connected") - go user.BridgeState.Send(status.BridgeState{StateEvent: status.StateConnected}) + user.BridgeState.Send(status.BridgeState{StateEvent: status.StateConnected}) } else { user.log.Debugfln("Saw phone after current bridge state said it has been offline, not sending new bridge state (prev: %s, connected: %t)", user.BridgeState.GetPrev().Error, user.IsConnected()) } @@ -766,19 +766,19 @@ func (user *User) HandleEvent(event interface{}) { } case *events.OfflineSyncPreview: user.log.Infofln("Server says it's going to send %d messages and %d receipts that were missed during downtime", v.Messages, v.Receipts) - go user.BridgeState.Send(status.BridgeState{ + user.BridgeState.Send(status.BridgeState{ StateEvent: status.StateBackfilling, Message: fmt.Sprintf("backfilling %d messages and %d receipts", v.Messages, v.Receipts), }) case *events.OfflineSyncCompleted: if !user.PhoneRecentlySeen(true) { user.log.Infofln("Offline sync completed, but phone last seen date is still %s - sending phone offline bridge status", user.PhoneLastSeen) - go user.BridgeState.Send(status.BridgeState{StateEvent: status.StateTransientDisconnect, Error: WAPhoneOffline}) + user.BridgeState.Send(status.BridgeState{StateEvent: status.StateTransientDisconnect, Error: WAPhoneOffline}) } else { if user.BridgeState.GetPrev().StateEvent == status.StateBackfilling { user.log.Infoln("Offline sync completed") } - go user.BridgeState.Send(status.BridgeState{StateEvent: status.StateConnected}) + user.BridgeState.Send(status.BridgeState{StateEvent: status.StateConnected}) } case *events.AppStateSyncComplete: if len(user.Client.Store.PushName) > 0 && v.Name == appstate.WAPatchCriticalBlock { @@ -816,32 +816,32 @@ func (user *User) HandleEvent(event interface{}) { } else { message = "Unknown stream error" } - go user.BridgeState.Send(status.BridgeState{StateEvent: status.StateUnknownError, Message: message}) + user.BridgeState.Send(status.BridgeState{StateEvent: status.StateUnknownError, Message: message}) user.bridge.Metrics.TrackConnectionState(user.JID, false) case *events.StreamReplaced: if user.bridge.Config.Bridge.CrashOnStreamReplaced { user.log.Infofln("Stopping bridge due to StreamReplaced event") user.bridge.ManualStop(60) } else { - go user.BridgeState.Send(status.BridgeState{StateEvent: status.StateUnknownError, Message: "Stream replaced"}) + user.BridgeState.Send(status.BridgeState{StateEvent: status.StateUnknownError, Message: "Stream replaced"}) user.bridge.Metrics.TrackConnectionState(user.JID, false) user.sendMarkdownBridgeAlert("The bridge was started in another location. Use `reconnect` to reconnect this one.") } case *events.ConnectFailure: - go user.BridgeState.Send(status.BridgeState{StateEvent: status.StateUnknownError, Message: fmt.Sprintf("Unknown connection failure: %s", v.Reason)}) + user.BridgeState.Send(status.BridgeState{StateEvent: status.StateUnknownError, Message: fmt.Sprintf("Unknown connection failure: %s", v.Reason)}) user.bridge.Metrics.TrackConnectionState(user.JID, false) case *events.ClientOutdated: user.log.Errorfln("Got a client outdated connect failure. The bridge is likely out of date, please update immediately.") - go user.BridgeState.Send(status.BridgeState{StateEvent: status.StateUnknownError, Message: "Connect failure: 405 client outdated"}) + user.BridgeState.Send(status.BridgeState{StateEvent: status.StateUnknownError, Message: "Connect failure: 405 client outdated"}) user.bridge.Metrics.TrackConnectionState(user.JID, false) case *events.TemporaryBan: - go user.BridgeState.Send(status.BridgeState{StateEvent: status.StateBadCredentials, Message: v.String()}) + user.BridgeState.Send(status.BridgeState{StateEvent: status.StateBadCredentials, Message: v.String()}) user.bridge.Metrics.TrackConnectionState(user.JID, false) case *events.Disconnected: // Don't send the normal transient disconnect state if we're already in a different transient disconnect state. // TODO remove this if/when the phone offline state is moved to a sub-state of CONNECTED if user.BridgeState.GetPrev().Error != WAPhoneOffline && user.PhoneRecentlySeen(false) { - go user.BridgeState.Send(status.BridgeState{StateEvent: status.StateTransientDisconnect, Error: WADisconnected}) + user.BridgeState.Send(status.BridgeState{StateEvent: status.StateTransientDisconnect, Error: WADisconnected}) } user.bridge.Metrics.TrackConnectionState(user.JID, false) case *events.Contact: @@ -926,10 +926,10 @@ func (user *User) HandleEvent(event interface{}) { case *events.AppState: // Ignore case *events.KeepAliveTimeout: - go user.BridgeState.Send(status.BridgeState{StateEvent: status.StateTransientDisconnect, Error: WAKeepaliveTimeout}) + user.BridgeState.Send(status.BridgeState{StateEvent: status.StateTransientDisconnect, Error: WAKeepaliveTimeout}) case *events.KeepAliveRestored: user.log.Infof("Keepalive restored after timeouts, sending connected event") - go user.BridgeState.Send(status.BridgeState{StateEvent: status.StateConnected}) + user.BridgeState.Send(status.BridgeState{StateEvent: status.StateConnected}) case *events.MarkChatAsRead: if user.bridge.Config.Bridge.SyncManualMarkedUnread { user.markUnread(user.GetPortalByJID(v.JID), !v.Action.GetRead())