fix: loop in shutdown code rewritten to work properly (#1695)

* FIX: loop in shutdown code rewritten to work properly

Signed-off-by: invario <67800603+invario@users.noreply.github.com>

* remove unneeded wait()

we already wait in shutdown.go#L52

* cleanup

---------

Signed-off-by: invario <67800603+invario@users.noreply.github.com>
Co-authored-by: Maxi Quoß <maxi@quoss.org>
This commit is contained in:
invario
2026-03-19 07:10:45 -04:00
committed by GitHub
parent 1d361e3f8b
commit 48a8c736b2
4 changed files with 30 additions and 19 deletions

View File

@@ -44,7 +44,7 @@ func ShutdownDevice(device *core.Record) error {
cmd.Stderr = &stderr
if err := cmd.Start(); err != nil {
logger.Error.Println(err)
return err
}
done := make(chan error, 1)
@@ -61,31 +61,46 @@ func ShutdownDevice(device *core.Record) error {
for {
select {
case <-time.After(1 * time.Second):
case err := <-done:
if err != nil {
return fmt.Errorf("%s", stderr.String())
} else {
for {
isOnline, err := PingDevice(device)
if err != nil {
logger.Error.Println(err)
return err
}
if isOnline {
if time.Since(start) >= time.Duration(shutdownTimeout)*time.Second {
return fmt.Errorf("%s not offline after %d seconds", device.GetString("name"), shutdownTimeout)
}
}
if !isOnline {
return nil
}
time.Sleep(1 * time.Second)
}
}
default:
isOnline, err := PingDevice(device)
if err != nil {
logger.Error.Println(err)
return err
}
if time.Since(start) >= time.Duration(shutdownTimeout)*time.Second {
if err := KillProcess(cmd.Process); err != nil {
logger.Error.Println(err)
}
return fmt.Errorf("%s not offline after %d seconds", device.GetString("name"), shutdownTimeout)
}
isOnline, err := PingDevice(device)
if err != nil {
logger.Error.Println(err)
return err
}
if !isOnline {
if err := KillProcess(cmd.Process); err != nil {
logger.Error.Println(err)
}
return nil
}
case err := <-done:
if err != nil {
if err := KillProcess(cmd.Process); err != nil {
logger.Error.Println(err)
}
return fmt.Errorf("%s", stderr.String())
}
time.Sleep(1 * time.Second)
}
}
}

View File

@@ -1,5 +1,4 @@
//go:build !windows
// +build !windows
package networking
@@ -29,7 +28,5 @@ func KillProcess(process *os.Process) error {
return unix.Kill(-pgid, unix.SIGKILL)
}
_, err = process.Wait()
return err
}

View File

@@ -1,5 +1,4 @@
//go:build windows
// +build windows
package networking

View File

@@ -151,7 +151,7 @@ func HandlerShutdown(e *core.RequestEvent) error {
if err := asyncCall(e, func() *router.ApiError {
if err := networking.ShutdownDevice(record); err != nil {
logger.Error.Println(err)
logger.Error.Println(strings.ReplaceAll(err.Error(), "\n", ""))
record.Set("status", "online")
if err := e.App.Save(record); err != nil {
logger.Error.Println("Failed to save record:", err)