From c55fcbc95668fa1e879c6c6396883a33a4354e19 Mon Sep 17 00:00:00 2001 From: Miguel Molina Date: Wed, 15 May 2019 17:29:16 +0200 Subject: [PATCH] server: guard sessions access in mutex Signed-off-by: Miguel Molina --- server/context.go | 6 ++++++ server/handler.go | 7 +++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/server/context.go b/server/context.go index 04bef3aa5..a006019c9 100644 --- a/server/context.go +++ b/server/context.go @@ -64,6 +64,12 @@ func (s *SessionManager) NewSession(conn *mysql.Conn) { s.mu.Unlock() } +func (s *SessionManager) session(conn *mysql.Conn) sql.Session { + s.mu.Lock() + defer s.mu.Unlock() + return s.sessions[conn.ConnectionID] +} + // NewContext creates a new context for the session at the given conn. func (s *SessionManager) NewContext(conn *mysql.Conn) *sql.Context { return s.NewContextWithQuery(conn, "") diff --git a/server/handler.go b/server/handler.go index a863704bc..7a9580d9f 100644 --- a/server/handler.go +++ b/server/handler.go @@ -150,12 +150,11 @@ func (h *Handler) ComQuery( // ComQuery callback if the result does not contain any fields, // or after the last ComQuery call completes. func (h *Handler) WarningCount(c *mysql.Conn) uint16 { - sess, ok := h.sm.sessions[c.ConnectionID] - if !ok { - return 0 + if sess := h.sm.session(c); sess != nil { + return sess.WarningCount() } - return sess.WarningCount() + return 0 } func (h *Handler) handleKill(conn *mysql.Conn, query string) (bool, error) {