aboutsummaryrefslogtreecommitdiff
path: root/config.go
diff options
context:
space:
mode:
Diffstat (limited to 'config.go')
-rw-r--r--config.go30
1 files changed, 21 insertions, 9 deletions
diff --git a/config.go b/config.go
index e67d4ac..89249b6 100644
--- a/config.go
+++ b/config.go
@@ -5,6 +5,7 @@ import (
"log"
"os"
"path/filepath"
+ "sync"
)
const latestSerializeVer = 28
@@ -18,7 +19,8 @@ const defaultUserLimit = 10
const defaultAuthBackend = "sqlite3"
const defaultBindAddr = ":40000"
-var conf Config
+var config Config
+var configMu sync.RWMutex
type Config struct {
RequirePasswd bool
@@ -41,13 +43,23 @@ type Config struct {
MapRange uint32
}
+func conf() Config {
+ configMu.RLock()
+ defer configMu.RUnlock()
+
+ return config
+}
+
func loadConfig() error {
- oldConf := conf
+ configMu.Lock()
+ defer configMu.Unlock()
+
+ oldConf := config
- conf.SendInterval = defaultSendInterval
- conf.UserLimit = defaultUserLimit
- conf.AuthBackend = defaultAuthBackend
- conf.BindAddr = defaultBindAddr
+ config.SendInterval = defaultSendInterval
+ config.UserLimit = defaultUserLimit
+ config.AuthBackend = defaultAuthBackend
+ config.BindAddr = defaultBindAddr
executable, err := os.Executable()
if err != nil {
@@ -57,7 +69,7 @@ func loadConfig() error {
path := filepath.Dir(executable) + "/config.json"
f, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE, 0666)
if err != nil {
- conf = oldConf
+ config = oldConf
return err
}
defer f.Close()
@@ -68,8 +80,8 @@ func loadConfig() error {
}
decoder := json.NewDecoder(f)
- if err := decoder.Decode(&conf); err != nil {
- conf = oldConf
+ if err := decoder.Decode(&config); err != nil {
+ config = oldConf
return err
}