Browse Source

Don't use goroutine for queuing bridge states

Tulir Asokan 2 years ago
parent
commit
fc743f1ad2
1 changed files with 12 additions and 12 deletions
  1. 12 12
      user.go

+ 12 - 12
user.go

@@ -712,7 +712,7 @@ func (user *User) phoneSeen(ts time.Time) {
 	} else if !user.PhoneRecentlySeen(false) {
 	} else if !user.PhoneRecentlySeen(false) {
 		if user.BridgeState.GetPrev().Error == WAPhoneOffline && user.IsConnected() {
 		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")
 			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 {
 		} 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())
 			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:
 	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)
 		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,
 			StateEvent: status.StateBackfilling,
 			Message:    fmt.Sprintf("backfilling %d messages and %d receipts", v.Messages, v.Receipts),
 			Message:    fmt.Sprintf("backfilling %d messages and %d receipts", v.Messages, v.Receipts),
 		})
 		})
 	case *events.OfflineSyncCompleted:
 	case *events.OfflineSyncCompleted:
 		if !user.PhoneRecentlySeen(true) {
 		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)
 			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 {
 		} else {
 			if user.BridgeState.GetPrev().StateEvent == status.StateBackfilling {
 			if user.BridgeState.GetPrev().StateEvent == status.StateBackfilling {
 				user.log.Infoln("Offline sync completed")
 				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:
 	case *events.AppStateSyncComplete:
 		if len(user.Client.Store.PushName) > 0 && v.Name == appstate.WAPatchCriticalBlock {
 		if len(user.Client.Store.PushName) > 0 && v.Name == appstate.WAPatchCriticalBlock {
@@ -816,32 +816,32 @@ func (user *User) HandleEvent(event interface{}) {
 		} else {
 		} else {
 			message = "Unknown stream error"
 			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)
 		user.bridge.Metrics.TrackConnectionState(user.JID, false)
 	case *events.StreamReplaced:
 	case *events.StreamReplaced:
 		if user.bridge.Config.Bridge.CrashOnStreamReplaced {
 		if user.bridge.Config.Bridge.CrashOnStreamReplaced {
 			user.log.Infofln("Stopping bridge due to StreamReplaced event")
 			user.log.Infofln("Stopping bridge due to StreamReplaced event")
 			user.bridge.ManualStop(60)
 			user.bridge.ManualStop(60)
 		} else {
 		} 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.bridge.Metrics.TrackConnectionState(user.JID, false)
 			user.sendMarkdownBridgeAlert("The bridge was started in another location. Use `reconnect` to reconnect this one.")
 			user.sendMarkdownBridgeAlert("The bridge was started in another location. Use `reconnect` to reconnect this one.")
 		}
 		}
 	case *events.ConnectFailure:
 	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)
 		user.bridge.Metrics.TrackConnectionState(user.JID, false)
 	case *events.ClientOutdated:
 	case *events.ClientOutdated:
 		user.log.Errorfln("Got a client outdated connect failure. The bridge is likely out of date, please update immediately.")
 		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)
 		user.bridge.Metrics.TrackConnectionState(user.JID, false)
 	case *events.TemporaryBan:
 	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)
 		user.bridge.Metrics.TrackConnectionState(user.JID, false)
 	case *events.Disconnected:
 	case *events.Disconnected:
 		// Don't send the normal transient disconnect state if we're already in a different transient disconnect state.
 		// 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
 		// 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) {
 		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)
 		user.bridge.Metrics.TrackConnectionState(user.JID, false)
 	case *events.Contact:
 	case *events.Contact:
@@ -926,10 +926,10 @@ func (user *User) HandleEvent(event interface{}) {
 	case *events.AppState:
 	case *events.AppState:
 		// Ignore
 		// Ignore
 	case *events.KeepAliveTimeout:
 	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:
 	case *events.KeepAliveRestored:
 		user.log.Infof("Keepalive restored after timeouts, sending connected event")
 		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:
 	case *events.MarkChatAsRead:
 		if user.bridge.Config.Bridge.SyncManualMarkedUnread {
 		if user.bridge.Config.Bridge.SyncManualMarkedUnread {
 			user.markUnread(user.GetPortalByJID(v.JID), !v.Action.GetRead())
 			user.markUnread(user.GetPortalByJID(v.JID), !v.Action.GetRead())