Skip to content

Commit

Permalink
Merge PR cosmos#2667: Gaialite signal handling fix
Browse files Browse the repository at this point in the history
Gaialite signal handling is broken, repair it
  • Loading branch information
rigelrozanski authored Nov 2, 2018
2 parents 22ef944 + e598af9 commit 0d5ebd2
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 13 deletions.
25 changes: 12 additions & 13 deletions client/lcd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,13 @@ package lcd

import (
"errors"
"net"
"net/http"
"os"

"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/context"
"github.com/cosmos/cosmos-sdk/client/keys"
"github.com/cosmos/cosmos-sdk/client/rpc"
"github.com/cosmos/cosmos-sdk/client/tx"
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/server"
auth "github.com/cosmos/cosmos-sdk/x/auth/client/rest"
bank "github.com/cosmos/cosmos-sdk/x/bank/client/rest"
gov "github.com/cosmos/cosmos-sdk/x/gov/client/rest"
Expand All @@ -21,9 +18,11 @@ import (
"github.com/rakyll/statik/fs"
"github.com/spf13/cobra"
"github.com/spf13/viper"
cmn "github.com/tendermint/tendermint/libs/common"
"github.com/tendermint/tendermint/libs/log"
tmserver "github.com/tendermint/tendermint/rpc/lib/server"
"net"
"net/http"
"os"
)

const (
Expand Down Expand Up @@ -53,10 +52,16 @@ func ServeCommand(cdc *codec.Codec) *cobra.Command {
sslHosts := viper.GetString(flagSSLHosts)
certFile := viper.GetString(flagSSLCertFile)
keyFile := viper.GetString(flagSSLKeyFile)
cleanupFunc := func() {}

var listener net.Listener
var fingerprint string

server.TrapSignal(func() {
err := listener.Close()
logger.Error("error closing listener", "err", err)
})

var cleanupFunc func()
if viper.GetBool(flagInsecure) {
listener, err = tmserver.StartHTTPServer(
listenAddr, handler, logger,
Expand Down Expand Up @@ -89,6 +94,7 @@ func ServeCommand(cdc *codec.Codec) *cobra.Command {
}
defer cleanupFunc()
}

listener, err = tmserver.StartHTTPAndTLSServer(
listenAddr, handler,
certFile, keyFile,
Expand All @@ -102,13 +108,6 @@ func ServeCommand(cdc *codec.Codec) *cobra.Command {
}
logger.Info("REST server started")

// wait forever and cleanup
cmn.TrapSignal(func() {
defer cleanupFunc()
err := listener.Close()
logger.Error("error closing listener", "err", err)
})

return nil
},
}
Expand Down
19 changes: 19 additions & 0 deletions server/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ import (
"encoding/json"
"net"
"os"
"os/signal"
"path/filepath"
"syscall"

"github.com/pkg/errors"
"github.com/spf13/cobra"
Expand Down Expand Up @@ -203,6 +205,23 @@ func ExternalIP() (string, error) {
return "", errors.New("are you connected to the network?")
}

// TrapSignal traps SIGINT and SIGTERM and terminates the server correctly.
func TrapSignal(cleanupFunc func()) {
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
sig := <-sigs
switch sig {
case syscall.SIGTERM:
defer cleanupFunc()
os.Exit(128 + int(syscall.SIGTERM))
case syscall.SIGINT:
defer cleanupFunc()
os.Exit(128 + int(syscall.SIGINT))
}
}()
}

func skipInterface(iface net.Interface) bool {
if iface.Flags&net.FlagUp == 0 {
return true // interface down
Expand Down

0 comments on commit 0d5ebd2

Please sign in to comment.