From 46d5b31fc906f2ee863cda172e783e49cd46fc99 Mon Sep 17 00:00:00 2001 From: Morgan Tocker Date: Thu, 13 May 2021 09:05:10 -0600 Subject: [PATCH] Make reading getsysvar list concurrency safe --- sessionctx/variable/sysvar.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sessionctx/variable/sysvar.go b/sessionctx/variable/sysvar.go index bcd5e3b719485..6121ad61552ac 100644 --- a/sessionctx/variable/sysvar.go +++ b/sessionctx/variable/sysvar.go @@ -509,11 +509,15 @@ func SetSysVar(name string, value string) { sysVars[name].Value = value } -// GetSysVars returns the sysVars list under a RWLock +// GetSysVars deep copies the sysVars list under a RWLock func GetSysVars() map[string]*SysVar { sysVarsLock.RLock() defer sysVarsLock.RUnlock() - return sysVars + copy := make(map[string]*SysVar, len(sysVars)) + for name, sv := range sysVars { + copy[name] = sv + } + return copy } // PluginVarNames is global plugin var names set.