fix(codersdk): abort in-progress writes/reads when closing websocket (#12650)

Fixes #9203

Related #12065

Also, adds some basic tracing infrastructure that we can build upon for more improvements.
This commit is contained in:
Ammar Bandukwala 2024-03-20 11:53:32 -05:00 committed by GitHub
parent 92aa1eba97
commit 0d86dca852
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 18 additions and 1 deletions

View File

@ -18,6 +18,7 @@ import (
"os/signal"
"path/filepath"
"runtime"
"runtime/trace"
"strings"
"syscall"
"text/tabwriter"
@ -139,6 +140,22 @@ func (r *RootCmd) AGPL() []*serpent.Command {
// Main is the entrypoint for the Coder CLI.
func (r *RootCmd) RunMain(subcommands []*serpent.Command) {
// This configuration is not available as a standard option because we
// want to trace the entire program, including Options parsing.
goTraceFilePath, ok := os.LookupEnv("CODER_GO_TRACE")
if ok {
traceFile, err := os.OpenFile(goTraceFilePath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0o644)
if err != nil {
panic(fmt.Sprintf("failed to open trace file: %v", err))
}
defer traceFile.Close()
if err := trace.Start(traceFile); err != nil {
panic(fmt.Sprintf("failed to start trace: %v", err))
}
defer trace.Stop()
}
rand.Seed(time.Now().UnixMicro())
cmd, err := r.Command(subcommands)

View File

@ -32,7 +32,7 @@ func (c *wsNetConn) Write(b []byte) (n int, err error) {
}
func (c *wsNetConn) Close() error {
defer c.cancel()
c.cancel()
return c.Conn.Close()
}