aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/utils/cmd.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/utils/cmd.go')
-rw-r--r--cmd/utils/cmd.go88
1 files changed, 33 insertions, 55 deletions
diff --git a/cmd/utils/cmd.go b/cmd/utils/cmd.go
index f7520a8e4..2949d2470 100644
--- a/cmd/utils/cmd.go
+++ b/cmd/utils/cmd.go
@@ -1,24 +1,20 @@
-/*
- This file is part of go-ethereum
+// Copyright 2014 The go-ethereum Authors
+// This file is part of go-ethereum.
+//
+// go-ethereum is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// go-ethereum is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
- go-ethereum is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- go-ethereum is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
-*/
-/**
- * @authors
- * Jeffrey Wilcke <i@jev.io>
- * Viktor Tron <viktor@ethdev.com>
- */
+// Package utils contains internal helper functions for go-ethereum commands.
package utils
import (
@@ -46,29 +42,6 @@ const (
var interruptCallbacks = []func(os.Signal){}
-// 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() {
- signal.Notify(c, os.Interrupt)
- for sig := range c {
- glog.V(logger.Error).Infof("Shutting down (%v) ... \n", sig)
- RunInterruptCallbacks(sig)
- }
- }()
-}
-
-func RunInterruptCallbacks(sig os.Signal) {
- for _, cb := range interruptCallbacks {
- cb(sig)
- }
-}
-
func openLogFile(Datadir string, filename string) *os.File {
path := common.AbsolutePath(Datadir, filename)
file, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
@@ -149,19 +122,24 @@ func StartEthereum(ethereum *eth.Ethereum) {
if err := ethereum.Start(); err != nil {
Fatalf("Error starting Ethereum: %v", err)
}
- RegisterInterrupt(func(sig os.Signal) {
- ethereum.Stop()
- logger.Flush()
- })
-}
-
-func StartEthereumForTest(ethereum *eth.Ethereum) {
- glog.V(logger.Info).Infoln("Starting ", ethereum.Name())
- ethereum.StartForTest()
- RegisterInterrupt(func(sig os.Signal) {
- ethereum.Stop()
+ go func() {
+ sigc := make(chan os.Signal, 1)
+ signal.Notify(sigc, os.Interrupt)
+ defer signal.Stop(sigc)
+ <-sigc
+ glog.V(logger.Info).Infoln("Got interrupt, shutting down...")
+ go ethereum.Stop()
logger.Flush()
- })
+ for i := 10; i > 0; i-- {
+ <-sigc
+ if i > 1 {
+ glog.V(logger.Info).Infoln("Already shutting down, please be patient.")
+ glog.V(logger.Info).Infoln("Interrupt", i-1, "more times to induce panic.")
+ }
+ }
+ glog.V(logger.Error).Infof("Force quitting: this might not end so well.")
+ panic("boom")
+ }()
}
func FormatTransactionData(data string) []byte {