From 3627384fc5666b8d154864f8f5c52958089c4003 Mon Sep 17 00:00:00 2001 From: Patrick Pacher Date: Tue, 17 Aug 2021 13:47:17 +0200 Subject: [PATCH] Improve locking in intel/geoip --- intel/geoip/database.go | 3 ++- intel/geoip/lookup.go | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/intel/geoip/database.go b/intel/geoip/database.go index 2706f49f..57c07489 100644 --- a/intel/geoip/database.go +++ b/intel/geoip/database.go @@ -20,7 +20,7 @@ var ( geoDBv4Reader *maxminddb.Reader geoDBv6Reader *maxminddb.Reader - dbLock sync.Mutex + dbLock sync.RWMutex dbInUse = abool.NewBool(false) // only activate if used for first time dbDoReload = abool.NewBool(true) // if database should be reloaded @@ -35,6 +35,7 @@ func ReloadDatabases() error { dbFileLock.Lock() defer dbFileLock.Unlock() + dbLock.Lock() defer dbLock.Unlock() diff --git a/intel/geoip/lookup.go b/intel/geoip/lookup.go index b4c7f320..16a8f59f 100644 --- a/intel/geoip/lookup.go +++ b/intel/geoip/lookup.go @@ -15,8 +15,8 @@ func getReader(ip net.IP) *maxminddb.Reader { // GetLocation returns Location data of an IP address func GetLocation(ip net.IP) (record *Location, err error) { - dbLock.Lock() - defer dbLock.Unlock() + dbLock.RLock() + defer dbLock.RUnlock() err = prepDatabaseForUse() if err != nil {