From 4e015aaf8ff039c739296585d13c7c9a2f23c7b2 Mon Sep 17 00:00:00 2001 From: Evan Simkowitz Date: Wed, 29 Jan 2025 12:41:04 -0800 Subject: [PATCH] Don't attempt to build SIGUSR1 handler for Windows, add it to WSH --- cmd/server/main-server.go | 37 ++++---------------------- cmd/wsh/cmd/wshcmd-connserver.go | 4 +++ pkg/util/sigutil/sigusr1_notwindows.go | 28 +++++++++++++++++++ pkg/util/sigutil/sigusr1_windows.go | 10 +++++++ pkg/util/sigutil/sigutil.go | 27 +++++++++++++++++++ 5 files changed, 74 insertions(+), 32 deletions(-) create mode 100644 pkg/util/sigutil/sigusr1_notwindows.go create mode 100644 pkg/util/sigutil/sigusr1_windows.go create mode 100644 pkg/util/sigutil/sigutil.go diff --git a/cmd/server/main-server.go b/cmd/server/main-server.go index dfb9695134..cd0d8640f6 100644 --- a/cmd/server/main-server.go +++ b/cmd/server/main-server.go @@ -8,11 +8,9 @@ import ( "fmt" "log" "os" - "os/signal" "runtime" "sync" - "syscall" "time" "github.com/wavetermdev/waveterm/pkg/authkey" @@ -25,7 +23,7 @@ import ( "github.com/wavetermdev/waveterm/pkg/service" "github.com/wavetermdev/waveterm/pkg/telemetry" "github.com/wavetermdev/waveterm/pkg/util/shellutil" - "github.com/wavetermdev/waveterm/pkg/util/utilfn" + "github.com/wavetermdev/waveterm/pkg/util/sigutil" "github.com/wavetermdev/waveterm/pkg/wavebase" "github.com/wavetermdev/waveterm/pkg/waveobj" "github.com/wavetermdev/waveterm/pkg/wcloud" @@ -72,33 +70,6 @@ func doShutdown(reason string) { }) } -func installShutdownSignalHandlers() { - sigCh := make(chan os.Signal, 1) - signal.Notify(sigCh, syscall.SIGHUP, syscall.SIGTERM, syscall.SIGINT) - go func() { - defer func() { - panichandler.PanicHandler("installShutdownSignalHandlers", recover()) - }() - for sig := range sigCh { - doShutdown(fmt.Sprintf("got signal %v", sig)) - break - } - }() -} - -func installSIGUSR1Handler() { - sigCh := make(chan os.Signal, 1) - signal.Notify(sigCh, syscall.SIGUSR1) - go func() { - defer func() { - panichandler.PanicHandler("installSIGUSR1Handler", recover()) - }() - for range sigCh { - utilfn.DumpGoRoutineStacks() - } - }() -} - // watch stdin, kill server if stdin is closed func stdinReadWatch() { buf := make([]byte, 1024) @@ -312,8 +283,10 @@ func main() { } createMainWshClient() - installShutdownSignalHandlers() - installSIGUSR1Handler() + + sigutil.InstallShutdownSignalHandlers(doShutdown) + sigutil.InstallSIGUSR1Handler() + startupActivityUpdate() go stdinReadWatch() go telemetryLoop() diff --git a/cmd/wsh/cmd/wshcmd-connserver.go b/cmd/wsh/cmd/wshcmd-connserver.go index 3a3e20d643..678ea77cc5 100644 --- a/cmd/wsh/cmd/wshcmd-connserver.go +++ b/cmd/wsh/cmd/wshcmd-connserver.go @@ -20,6 +20,7 @@ import ( "github.com/wavetermdev/waveterm/pkg/panichandler" "github.com/wavetermdev/waveterm/pkg/remote/fileshare/wshfs" "github.com/wavetermdev/waveterm/pkg/util/packetparser" + "github.com/wavetermdev/waveterm/pkg/util/sigutil" "github.com/wavetermdev/waveterm/pkg/wavebase" "github.com/wavetermdev/waveterm/pkg/wshrpc" "github.com/wavetermdev/waveterm/pkg/wshrpc/wshclient" @@ -261,6 +262,9 @@ func serverRun(cmd *cobra.Command, args []string) error { if err != nil { return err } + + sigutil.InstallSIGUSR1Handler() + if singleServerRouter { return serverRunSingle(jwtToken) } else if connServerRouter { diff --git a/pkg/util/sigutil/sigusr1_notwindows.go b/pkg/util/sigutil/sigusr1_notwindows.go new file mode 100644 index 0000000000..d006c7f322 --- /dev/null +++ b/pkg/util/sigutil/sigusr1_notwindows.go @@ -0,0 +1,28 @@ +//go:build !windows + +// Copyright 2025, Command Line Inc. +// SPDX-License-Identifier: Apache-2.0 + +package sigutil + +import ( + "os" + "os/signal" + "syscall" + + "github.com/wavetermdev/waveterm/pkg/panichandler" + "github.com/wavetermdev/waveterm/pkg/util/utilfn" +) + +func InstallSIGUSR1Handler() { + sigCh := make(chan os.Signal, 1) + signal.Notify(sigCh, syscall.SIGUSR1) + go func() { + defer func() { + panichandler.PanicHandler("InstallSIGUSR1Handler", recover()) + }() + for range sigCh { + utilfn.DumpGoRoutineStacks() + } + }() +} diff --git a/pkg/util/sigutil/sigusr1_windows.go b/pkg/util/sigutil/sigusr1_windows.go new file mode 100644 index 0000000000..d9b4e0e26f --- /dev/null +++ b/pkg/util/sigutil/sigusr1_windows.go @@ -0,0 +1,10 @@ +//go:build windows + +// Copyright 2025, Command Line Inc. +// SPDX-License-Identifier: Apache-2.0 + +package sigutil + +func InstallSIGUSR1Handler() { + // do nothing +} diff --git a/pkg/util/sigutil/sigutil.go b/pkg/util/sigutil/sigutil.go new file mode 100644 index 0000000000..434ae91d9b --- /dev/null +++ b/pkg/util/sigutil/sigutil.go @@ -0,0 +1,27 @@ +// Copyright 2025, Command Line Inc. +// SPDX-License-Identifier: Apache-2.0 + +package sigutil + +import ( + "fmt" + "os" + "os/signal" + "syscall" + + "github.com/wavetermdev/waveterm/pkg/panichandler" +) + +func InstallShutdownSignalHandlers(doShutdown func(string)) { + sigCh := make(chan os.Signal, 1) + signal.Notify(sigCh, syscall.SIGHUP, syscall.SIGTERM, syscall.SIGINT) + go func() { + defer func() { + panichandler.PanicHandler("InstallShutdownSignalHandlers", recover()) + }() + for sig := range sigCh { + doShutdown(fmt.Sprintf("got signal %v", sig)) + break + } + }() +}