daemon: use sync.Once for systemd detection
@@ -14,6 +14,7 @@ import (
"runtime/debug"
"strconv"
"strings"
+ "sync"
"time"
"github.com/containerd/cgroups"
@@ -644,6 +645,11 @@ func UsingSystemd(config *config.Config) bool {
return false
}
+var (
+ runningSystemd bool
+ detectSystemd sync.Once
+)
+
// isRunningSystemd checks whether the host was booted with systemd as its init
// system. This functions similarly to systemd's `sd_booted(3)`: internally, it
// checks whether /run/systemd/system/ exists and is a directory.
@@ -652,11 +658,14 @@ func UsingSystemd(config *config.Config) bool {
// NOTE: This function comes from package github.com/coreos/go-systemd/util
// It was borrowed here to avoid a dependency on cgo.
func isRunningSystemd() bool {
+ detectSystemd.Do(func() {
fi, err := os.Lstat("/run/systemd/system")
if err != nil {
- return false
+ return
}
- return fi.IsDir()
+ runningSystemd = fi.IsDir()
+ })
+ return runningSystemd
}
// verifyPlatformContainerSettings performs platform-specific validation of the
