From c84170d61528fa5f4d7069641d513522f51d63d2 Mon Sep 17 00:00:00 2001 From: partisan Date: Fri, 28 Mar 2025 09:21:38 +0000 Subject: [PATCH 1/3] Fix RunAndWait() process detection Fixed incorrect browser exit detection in RunAndWait() which could lead to Browser file corruption due to incomplete updates. --- run_win.go | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/run_win.go b/run_win.go index a108d7e..706b6d4 100644 --- a/run_win.go +++ b/run_win.go @@ -9,7 +9,10 @@ import ( "os" "os/exec" "path/filepath" - "syscall" + "strings" + "time" + + "golang.org/x/sys/windows" ) // Run locates and starts the installed Spitfire browser without waiting for it to exit. @@ -33,7 +36,6 @@ func RunAndWait() error { return fmt.Errorf("failed to get install directory: %w", err) } - // Construct the browser executable path exePath := filepath.Join(installDir, "browser", "spitfire.exe") if _, err := os.Stat(exePath); err != nil { return fmt.Errorf("browser executable not found at %s: %w", exePath, err) @@ -42,23 +44,29 @@ func RunAndWait() error { cmd := exec.Command(exePath) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr + cmd.Dir = filepath.Join(installDir, "browser") - // Use CREATE_NEW_PROCESS_GROUP flag for Windows - cmd.SysProcAttr = &syscall.SysProcAttr{ - CreationFlags: syscall.CREATE_NEW_PROCESS_GROUP, + // Create job object starting the process + job, err := windows.CreateJobObject(nil, nil) + if err != nil { + return fmt.Errorf("failed to create job object: %w", err) } + defer windows.CloseHandle(job) fmt.Printf("Starting browser: %s\n", exePath) if err := cmd.Start(); err != nil { return fmt.Errorf("failed to start browser: %w", err) } - fmt.Printf("Browser process started with PID %d\n", cmd.Process.Pid) - - if err := cmd.Wait(); err != nil { - return fmt.Errorf("browser exited with error: %w", err) + for { + cmd := exec.Command("tasklist", "/FI", "IMAGENAME eq spitfire.exe") + output, _ := cmd.Output() + if !strings.Contains(string(output), "spitfire.exe") { + break + } + time.Sleep(1 * time.Second) } - fmt.Println("Browser exited successfully.") + fmt.Println("Browser exited.") return nil } From b31ea5f3ccd49e9ec640a566adebf5d2d8ff179c Mon Sep 17 00:00:00 2001 From: partisan Date: Fri, 28 Mar 2025 09:33:17 +0000 Subject: [PATCH 2/3] Update go.sum --- go.sum | 2 ++ 1 file changed, 2 insertions(+) diff --git a/go.sum b/go.sum index be248fb..bd54818 100644 --- a/go.sum +++ b/go.sum @@ -4,6 +4,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= From af129cb59d36b3d003b486be340309c30854463d Mon Sep 17 00:00:00 2001 From: partisan Date: Fri, 28 Mar 2025 09:33:36 +0000 Subject: [PATCH 3/3] Update go.mod --- go.mod | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 8b67881..f4c1524 100644 --- a/go.mod +++ b/go.mod @@ -1,7 +1,12 @@ module weforge.xyz/Spitfire/SPM -go 1.21 +go 1.23.0 -require gopkg.in/ini.v1 v1.67.0 +toolchain go1.24.1 + +require ( + golang.org/x/sys v0.31.0 + gopkg.in/ini.v1 v1.67.0 +) require github.com/stretchr/testify v1.10.0 // indirect