fix: wait for ssh.Serve to terminate
Christian Muehlhaeuser
created
We need to wait for Serve to finish and clean up, otherwise we
terminate active connections by exiting through main.
Change summary
cmd/soft/serve.go | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
Detailed changes
@@ -23,22 +23,27 @@ var (
cfg := config.DefaultConfig()
s := server.NewServer(cfg)
- done := make(chan os.Signal, 1)
- signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
-
log.Printf("Starting SSH server on %s:%d", cfg.BindAddr, cfg.Port)
+
+ lch := make(chan error)
go func() {
- if err := s.Start(); err != nil {
- log.Fatalln(err)
- }
+ defer close(lch)
+ lch <- s.Start()
}()
+ done := make(chan os.Signal, 1)
+ signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
<-done
log.Printf("Stopping SSH server on %s:%d", cfg.BindAddr, cfg.Port)
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
- defer func() { cancel() }()
- return s.Shutdown(ctx)
+ defer cancel()
+ if err := s.Shutdown(ctx); err != nil {
+ return err
+ }
+
+ // wait for serve to finish
+ return <-lch
},
}
)