fleet/orbit/pkg/go-paniclog/paniclog_unix.go

40 lines
782 B
Go
Raw Normal View History

Fix Fleet Desktop bugs on Windows (#16402) #15821 This PR is adding two improvements and fixing two Windows bugs in Fleet Desktop: ## Improvement - We are now capturing the stderr of Fleet Desktop. This helped me find bug (1) below (otherwise the panic output below was hidden from us). - To reduce complexity I'm removing the "Theme detection" routine because we made the decision to use the colored icon for both themes..., see here: https://github.com/fleetdm/fleet/blob/415d1f493b91d9f40d87b968ce95cfc01e810e56/orbit/cmd/desktop/desktop_windows.go#L21-L27 ## Bug fixes 1. Fleet Desktop icon not showing in the task bar. This was fixed by updating to use the latest version of `fyne.io/systray`. (See https://github.com/fyne-io/systray/issues/22#issuecomment-1173157898.) 2. Orbit now properly detects if Fleet Desktop isn't running on Windows. Bug (1)'s panic output ``` panic: runtime error: invalid memory address or nil pointer dereference [signal 0xc0000005 code=0x0 addr=0x0 pc=0x72b14b] goroutine 23 [running]: fyne.io/systray.(*winTray).setTooltip(0x1eb5d40, {0x126923f?, 0x0?}) /Users/luk/gopath/pkg/mod/fyne.io/systray@v1.10.0/systray_windows.go:260 +0xcb fyne.io/systray.SetTooltip({0x126923f?, 0x125fc16?}) /Users/luk/gopath/pkg/mod/fyne.io/systray@v1.10.0/systray_windows.go:961 +0x29 main.main.func1() /Users/luk/fleetdm/git/fleet/orbit/cmd/desktop/desktop.go:103 +0xba fyne.io/systray.Register.func2() /Users/luk/gopath/pkg/mod/fyne.io/systray@v1.10.0/systray.go:98 +0x2f created by fyne.io/systray.Register in goroutine 1 /Users/luk/gopath/pkg/mod/fyne.io/systray@v1.10.0/systray.go:96 +0xb1 ``` - [X] Changes file added for user-visible changes in `changes/` or `orbit/changes/`. See [Changes files](https://fleetdm.com/docs/contributing/committing-changes#changes-files) for more information. - [X] Manual QA for all new/changed functionality - For Orbit and Fleet Desktop changes: - [X] Manual QA must be performed in the three main OSs, macOS, Windows and Linux. - [x] Auto-update manual QA, from released version of component to new version (see [tools/tuf/test](../tools/tuf/test/README.md)).
2024-01-29 21:52:55 +00:00
// Log the panic under unix to the log file
//go:build !windows && !solaris && !plan9
// +build !windows,!solaris,!plan9
package paniclog
import (
"errors"
"os"
"golang.org/x/sys/unix"
)
func redirectStderr(f *os.File) (UndoFunction, error) {
stderrFd := int(os.Stderr.Fd())
oldfd, err := unix.Dup(stderrFd)
if err != nil {
return nil, errors.New("Failed to redirect stderr to file: " + err.Error())
}
err = unix.Dup2(int(f.Fd()), stderrFd)
if err != nil {
return nil, errors.New("Failed to redirect stderr to file: " + err.Error())
}
undo := func() error {
undoErr := unix.Dup2(oldfd, stderrFd)
unix.Close(oldfd)
if undoErr != nil {
return errors.New("Failed to reverse stderr redirection: " + err.Error())
}
return nil
}
return undo, nil
}