diff options
author | zelig <viktor.tron@gmail.com> | 2014-06-26 17:47:45 +0800 |
---|---|---|
committer | zelig <viktor.tron@gmail.com> | 2014-06-26 17:47:45 +0800 |
commit | 2f96652bb408e65c205317403d749ba9a395c6bb (patch) | |
tree | 401b515d2a1d1d668ed692c8a39788f06ebc2b73 /utils | |
parent | 9a06efd0809c370451c5e85ce4688104cd5df461 (diff) | |
download | dexon-2f96652bb408e65c205317403d749ba9a395c6bb.tar.gz dexon-2f96652bb408e65c205317403d749ba9a395c6bb.tar.zst dexon-2f96652bb408e65c205317403d749ba9a395c6bb.zip |
interrupt handlers now ordered
Diffstat (limited to 'utils')
-rw-r--r-- | utils/cmd.go | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/utils/cmd.go b/utils/cmd.go index 34716b94a..da05c6d83 100644 --- a/utils/cmd.go +++ b/utils/cmd.go @@ -18,16 +18,23 @@ import ( ) var logger = ethlog.NewLogger("CLI") +var interruptCallbacks = []func(os.Signal){} -// Register interrupt handlers +// Register interrupt handlers callbacks func RegisterInterrupt(cb func(os.Signal)) { + interruptCallbacks = append(interruptCallbacks, cb) +} + +// go routine that call interrupt handlers in order of registering +func HandleInterrupt() { + c := make(chan os.Signal, 1) go func() { - // Buffered chan of one is enough - c := make(chan os.Signal, 1) - // Notify about interrupts for now signal.Notify(c, os.Interrupt) for sig := range c { - cb(sig) + logger.Errorf("Shutting down (%v) ... \n", sig) + for _, cb := range interruptCallbacks { + cb(sig) + } } }() } @@ -109,13 +116,12 @@ func NewEthereum(UseUPnP bool, OutboundPort string, MaxPeer int) *eth.Ethereum { func StartEthereum(ethereum *eth.Ethereum, UseSeed bool) { logger.Infof("Starting Ethereum v%s", ethutil.Config.Ver) ethereum.Start(UseSeed) - // Wait for shutdown - ethereum.WaitForShutdown() RegisterInterrupt(func(sig os.Signal) { - logger.Errorf("Shutting down (%v) ... \n", sig) ethereum.Stop() ethlog.Flush() }) + // this blocks the thread + ethereum.WaitForShutdown() } func ShowGenesis(ethereum *eth.Ethereum) { @@ -174,9 +180,6 @@ func StartRpc(ethereum *eth.Ethereum, RpcPort int) { logger.Errorf("Could not start RPC interface (port %v): %v", RpcPort, err) } else { go ethereum.RpcServer.Start() - RegisterInterrupt(func(os.Signal) { - ethereum.RpcServer.Stop() - }) } } |