mirror of
https://github.com/tailscale/tailscale.git
synced 2025-12-04 08:51:27 +01:00
When systemd notification support was omitted from the build, or on non-Linux systems, we were unnecessarily emitting code and generating garbage stringifying addresses upon transition to the Running state. Updates #12614 Change-Id: If713f47351c7922bb70e9da85bf92725b25954b9 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
40 lines
1.2 KiB
Go
40 lines
1.2 KiB
Go
// Copyright (c) Tailscale Inc & AUTHORS
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
package feature
|
|
|
|
import (
|
|
"runtime"
|
|
|
|
"tailscale.com/feature/buildfeatures"
|
|
)
|
|
|
|
// HookSystemdReady sends a readiness to systemd. This will unblock service
|
|
// dependents from starting.
|
|
var HookSystemdReady Hook[func()]
|
|
|
|
// HookSystemdStatus holds a func that will send a single line status update to
|
|
// systemd so that information shows up in systemctl output.
|
|
var HookSystemdStatus Hook[func(format string, args ...any)]
|
|
|
|
// SystemdStatus sends a single line status update to systemd so that
|
|
// information shows up in systemctl output.
|
|
//
|
|
// It does nothing on non-Linux systems or if the binary was built without
|
|
// the sdnotify feature.
|
|
func SystemdStatus(format string, args ...any) {
|
|
if !CanSystemdStatus { // mid-stack inlining DCE
|
|
return
|
|
}
|
|
if f, ok := HookSystemdStatus.GetOk(); ok {
|
|
f(format, args...)
|
|
}
|
|
}
|
|
|
|
// CanSystemdStatus reports whether the current build has systemd notifications
|
|
// linked in.
|
|
//
|
|
// It's effectively the same as HookSystemdStatus.IsSet(), but a constant for
|
|
// dead code elimination reasons.
|
|
const CanSystemdStatus = runtime.GOOS == "linux" && buildfeatures.HasSDNotify
|