From d9ee26a47b9d1a8aab79085521d203c0d910b4e2 Mon Sep 17 00:00:00 2001 From: Agniva De Sarker Date: Wed, 12 Aug 2020 22:10:19 +0530 Subject: [PATCH] MM-26575: Move app initialization inside Websocket router out of handler (#14991) * MM-26575: Move app initialization inside Websocket router out of handler The websocket router struct is shared amongst multiple handlers. Therefore, there is a race condition while setting the app field and reading from it. We move the initialization of the app field when the router struct is initialized. And we also remove the initializations of some app fields which caused race conditions by being written from multiple goroutines. They are already being written once inside the AppInitializedOnce.Do method and it's redundant to set them again to the same value. * Add missing fields in server connector Co-authored-by: Mattermod --- app/server.go | 1 + app/websocket_router.go | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/app/server.go b/app/server.go index 0d03398ee5..46ccb81853 100644 --- a/app/server.go +++ b/app/server.go @@ -392,6 +392,7 @@ func NewServer(options ...Option) (*Server, error) { server: s, handlers: make(map[string]webSocketHandler), } + s.WebSocketRouter.app = fakeApp if appErr := mailservice.TestConnection(s.Config()); appErr != nil { mlog.Error("Mail server connection test is failed: " + appErr.Message) diff --git a/app/websocket_router.go b/app/websocket_router.go index 179382daf1..de77e2c407 100644 --- a/app/websocket_router.go +++ b/app/websocket_router.go @@ -26,7 +26,6 @@ func (wr *WebSocketRouter) Handle(action string, handler webSocketHandler) { } func (wr *WebSocketRouter) ServeWebSocket(conn *WebConn, r *model.WebSocketRequest) { - wr.app = New(ServerConnector(wr.server)) wr.app.InitServer() if r.Action == "" {