Changed signal handling to use go signal handlers

This commit is contained in:
StephenButtolph 2020-05-06 20:55:52 -04:00
parent 982447e8e8
commit 87a175eaaf
1 changed files with 19 additions and 2 deletions

View File

@ -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)