From 6995a1ea7e4365f7758c966412d5943eec41cb51 Mon Sep 17 00:00:00 2001 From: Ryo Utsunomiya Date: Tue, 24 Sep 2019 16:22:23 +0900 Subject: [PATCH] Fix Shutdown() sample With current version of `Shutdown()` sample code, server is always blocked by 5 seconds timeout. We shouldn't wait for `ctx.Done()`. see: https://github.com/gin-gonic/examples/blob/master/graceful-shutdown/graceful-shutdown/server.go#L46-L51 --- README.md | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index dfedd8a2..3048517b 100644 --- a/README.md +++ b/README.md @@ -1759,10 +1759,10 @@ func main() { // Wait for interrupt signal to gracefully shutdown the server with // a timeout of 5 seconds. - quit := make(chan os.Signal) - // kill (no param) default send syscall.SIGTERM + quit := make(chan os.Signal, 1) + // kill (no param) default send syscanll.SIGTERM // kill -2 is syscall.SIGINT - // kill -9 is syscall.SIGKILL but can't be catch, so don't need add it + // kill -9 is syscall. SIGKILL but can"t be catch, so don't need add it signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) <-quit log.Println("Shutdown Server ...") @@ -1770,13 +1770,9 @@ func main() { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() if err := srv.Shutdown(ctx); err != nil { - log.Fatal("Server Shutdown:", err) - } - // catching ctx.Done(). timeout of 5 seconds. - select { - case <-ctx.Done(): - log.Println("timeout of 5 seconds.") + log.Fatal("Server Shutdown: ", err) } + log.Println("Server exiting") } ```