|
|
@@ -46,29 +46,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 +126,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) {
|
|
|
+ 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...")
|
|
|
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 {
|