fix(network): only trigger time sync when network transitions to online rather than every state change

This commit is contained in:
Siyuan 2025-11-20 20:24:17 +00:00
parent 61c2fa4a88
commit 86be6df1d3
2 changed files with 23 additions and 6 deletions

View File

@ -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())
}

View File

@ -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()
}