mirror of https://github.com/poanetwork/gecko.git
Changed signal handling to use go signal handlers
This commit is contained in:
parent
982447e8e8
commit
87a175eaaf
21
node/node.go
21
node/node.go
|
@ -4,7 +4,7 @@
|
|||
package node
|
||||
|
||||
// #include "salticidae/network.h"
|
||||
// void onTerm(int sig, void *);
|
||||
// void onTerm(threadcall_handle_t *, void *);
|
||||
// void errorHandler(SalticidaeCError *, bool, int32_t, void *);
|
||||
import "C"
|
||||
|
||||
|
@ -14,6 +14,8 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/signal"
|
||||
"path"
|
||||
"sync"
|
||||
"unsafe"
|
||||
|
@ -92,6 +94,10 @@ type Node struct {
|
|||
|
||||
// Event loop manager
|
||||
EC salticidae.EventContext
|
||||
|
||||
// Caller to the event context
|
||||
TCall salticidae.ThreadCall
|
||||
|
||||
// Network that manages validator peers
|
||||
PeerNet salticidae.PeerNetwork
|
||||
// Network that manages clients
|
||||
|
@ -124,7 +130,7 @@ type Node struct {
|
|||
*/
|
||||
|
||||
//export onTerm
|
||||
func onTerm(C.int, unsafe.Pointer) {
|
||||
func onTerm(*C.threadcall_handle_t, unsafe.Pointer) {
|
||||
MainNode.Log.Debug("Terminate signal received")
|
||||
MainNode.EC.Stop()
|
||||
}
|
||||
|
@ -143,6 +149,17 @@ func errorHandler(_err *C.struct_SalticidaeCError, fatal C.bool, asyncID C.int32
|
|||
func (n *Node) initNetlib() error {
|
||||
// Create main event context
|
||||
n.EC = salticidae.NewEventContext()
|
||||
n.TCall = salticidae.NewThreadCall(n.EC)
|
||||
|
||||
c := make(chan os.Signal, 1)
|
||||
signal.Notify(c, os.Interrupt)
|
||||
signal.Notify(c, os.Kill)
|
||||
|
||||
go func() {
|
||||
for range c {
|
||||
n.TCall.AsyncCall(salticidae.ThreadCallCallback(C.onTerm), nil)
|
||||
}
|
||||
}()
|
||||
|
||||
// Set up interrupt signal and terminate signal handlers
|
||||
evInt := salticidae.NewSigEvent(n.EC, salticidae.SigEventCallback(C.onTerm), nil)
|
||||
|
|
Loading…
Reference in New Issue