From 8b8e883961f97d4a99a8be8b60047bb7b61eefa4 Mon Sep 17 00:00:00 2001 From: Greg Curtis Date: Sat, 10 Nov 2018 00:28:05 -0800 Subject: [PATCH] stdlib: fix race with Driver.configs in Open The Driver.configs map is protected by configMutex in registerDriverConfig and unregisterDriverConfig, but not in Open. This results in a race if Open is called while another goroutine is registering/unregistering a DriverConfig. --- stdlib/sql.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stdlib/sql.go b/stdlib/sql.go index 3ec58552..4d69d259 100644 --- a/stdlib/sql.go +++ b/stdlib/sql.go @@ -140,8 +140,10 @@ func (d *Driver) Open(name string) (driver.Conn, error) { if len(name) >= 9 && name[0] == 0 { idBuf := []byte(name)[1:9] id := int64(binary.BigEndian.Uint64(idBuf)) + d.configMutex.Lock() connConfig = d.configs[id].ConnConfig afterConnect = d.configs[id].AfterConnect + d.configMutex.Unlock() name = name[9:] }