mirror of https://github.com/jetkvm/kvm.git
fix(network): only trigger time sync when network transitions to online rather than every state change
This commit is contained in:
parent
61c2fa4a88
commit
86be6df1d3
19
cmd/main.go
19
cmd/main.go
|
|
@ -101,15 +101,22 @@ func supervise() error {
|
|||
cmd.Args = os.Args
|
||||
|
||||
logFile, err := os.CreateTemp("", "jetkvm-stdout.log")
|
||||
defer func() {
|
||||
// we don't care about the errors here
|
||||
_ = logFile.Close()
|
||||
_ = os.Remove(logFile.Name())
|
||||
}()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create log file: %w", err)
|
||||
}
|
||||
|
||||
logFileName := logFile.Name()
|
||||
defer func() {
|
||||
// Close file if it's still open (safe to call even if already closed)
|
||||
if logFile != nil {
|
||||
_ = logFile.Close()
|
||||
}
|
||||
// Only remove if file still exists at original location (wasn't renamed)
|
||||
if _, err := os.Stat(logFileName); err == nil {
|
||||
_ = os.Remove(logFileName)
|
||||
}
|
||||
}()
|
||||
|
||||
// Use io.MultiWriter to write to both the original streams and our buffers
|
||||
cmd.Stdout = io.MultiWriter(os.Stdout, logFile)
|
||||
cmd.Stderr = io.MultiWriter(os.Stderr, logFile)
|
||||
|
|
@ -133,6 +140,8 @@ func supervise() error {
|
|||
}
|
||||
|
||||
if exiterr, ok := cmdErr.(*exec.ExitError); ok {
|
||||
// createErrorDump will close and rename the file if successful
|
||||
// Note: os.Exit bypasses defer, but file is already handled by createErrorDump
|
||||
createErrorDump(logFile)
|
||||
os.Exit(exiterr.ExitCode())
|
||||
}
|
||||
|
|
|
|||
10
network.go
10
network.go
|
|
@ -6,6 +6,7 @@ import (
|
|||
"net"
|
||||
"net/http"
|
||||
"reflect"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/jetkvm/kvm/internal/confparser"
|
||||
|
|
@ -118,6 +119,10 @@ func setPublicIPReadyState(ipv4Ready, ipv6Ready bool) {
|
|||
publicIPState.SetIPv4AndIPv6(ipv4Ready, ipv6Ready)
|
||||
}
|
||||
|
||||
var (
|
||||
isOnline = &atomic.Bool{}
|
||||
)
|
||||
|
||||
func networkStateChanged(_ string, state types.InterfaceState) {
|
||||
// do not block the main thread
|
||||
go waitCtrlAndRequestDisplayUpdate(true, "network_state_changed")
|
||||
|
|
@ -126,7 +131,10 @@ func networkStateChanged(_ string, state types.InterfaceState) {
|
|||
writeJSONRPCEvent("networkState", state.ToRpcInterfaceState(), currentSession)
|
||||
}
|
||||
|
||||
if state.Online {
|
||||
previousOnline := isOnline.Load()
|
||||
isOnline.Store(state.Online)
|
||||
|
||||
if state.Online && !previousOnline {
|
||||
networkLogger.Info().Msg("network state changed to online, triggering time sync")
|
||||
triggerTimeSyncOnNetworkStateChange()
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue