dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit bb4e5741a722ac816cff51a681d05bed0c2257d8
parent 3fd6bd2c993eb4254b92cd58431685ade9d71534
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Tue, 23 May 2023 20:21:28 -0700

graceful shutdown

Diffstat:
Mpkg/web/web.go | 28+++++++++++++++++++++++++---
1 file changed, 25 insertions(+), 3 deletions(-)

diff --git a/pkg/web/web.go b/pkg/web/web.go @@ -21,6 +21,8 @@ import ( yaml "gopkg.in/yaml.v1" "net" "net/http" + "os" + "os/signal" "regexp" "strconv" "strings" @@ -338,11 +340,31 @@ func startTorServer(db *database.DkfDB, host string, port int) { } func startServer(e *echo.Echo, address string) { - if err := e.Start(address); err != nil { - if err != http.ErrServerClosed { - logrus.Error(err) + serverError := make(chan struct{}) + + utils.SGo(func() { + if err := e.Start(address); err != nil { + if err != http.ErrServerClosed { + logrus.Error(err) + } } + }) + + // Wait for interrupt signal to gracefully shutdown the server with + // a timeout of 10 seconds. + quit := make(chan os.Signal) + signal.Notify(quit, os.Interrupt) + select { + case <-quit: + case <-serverError: + } + logrus.Info("graceful shutdown") + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + if err := e.Shutdown(ctx); err != nil { + logrus.Errorf("graceful shutdown failed: %s", err.Error()) } + logrus.Info("Bye!") } // Start ...