]> Cypherpunks repositories - gostls13.git/commitdiff
database/sql: use RWMutex for driver registration
authorNathan VanBenschoten <nvanbenschoten@gmail.com>
Fri, 23 Oct 2015 01:50:06 +0000 (21:50 -0400)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 23 Oct 2015 04:33:50 +0000 (04:33 +0000)
Change-Id: I0f494c9f17cb6bb0cf5e7214cf033fdbd48f27f7
Reviewed-on: https://go-review.googlesource.com/16240
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/database/sql/sql.go

index f3fed953ad316214d0bd5aacd4430e09f5be9c62..31e9605309d7f0e913cb6e54e042a6387f045799 100644 (file)
@@ -24,7 +24,7 @@ import (
 )
 
 var (
-       driversMu sync.Mutex
+       driversMu sync.RWMutex
        drivers   = make(map[string]driver.Driver)
 )
 
@@ -52,8 +52,8 @@ func unregisterAllDrivers() {
 
 // Drivers returns a sorted list of the names of the registered drivers.
 func Drivers() []string {
-       driversMu.Lock()
-       defer driversMu.Unlock()
+       driversMu.RLock()
+       defer driversMu.RUnlock()
        var list []string
        for name := range drivers {
                list = append(list, name)
@@ -465,9 +465,9 @@ var connectionRequestQueueSize = 1000000
 // function should be called just once. It is rarely necessary to
 // close a DB.
 func Open(driverName, dataSourceName string) (*DB, error) {
-       driversMu.Lock()
+       driversMu.RLock()
        driveri, ok := drivers[driverName]
-       driversMu.Unlock()
+       driversMu.RUnlock()
        if !ok {
                return nil, fmt.Errorf("sql: unknown driver %q (forgotten import?)", driverName)
        }