Closed meyer9 closed 5 years ago
Isn't this already implemented?
beacon/app/app.go
func (app BeaconApp) listenForInterrupt() {
signalHandler := make(chan os.Signal, 1)
signal.Notify(signalHandler, os.Interrupt)
<-signalHandler
app.exitChan <- struct{}{}
}
func (app BeaconApp) waitForExit() {
<-app.exitChan
app.exit()
logger.Info("exiting")
}
func (app BeaconApp) exit() {
err := app.database.Close()
if err != nil {
panic(err)
}
}
Well, I'll try to run it and ctrl-c a few times, but I don't think it's working.
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0xb6d317]
goroutine 149 [running]:
github.com/dgraph-io/badger/skl.(*Skiplist).IncrRef(...)
/home/meyer9/go/src/github.com/dgraph-io/badger/skl/skl.go:86
github.com/dgraph-io/badger.(*DB).getMemTables(0xc0000f4c00, 0x0, 0x0, 0x0, 0x0)
/home/meyer9/go/src/github.com/dgraph-io/badger/db.go:459 +0xd7
github.com/dgraph-io/badger.(*DB).get(0xc0000f4c00, 0xc0099153e0, 0x2d, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
/home/meyer9/go/src/github.com/dgraph-io/badger/db.go:491 +0x66
github.com/dgraph-io/badger.(*Txn).Get(0xc00991a580, 0xc0099153b0, 0x25, 0x30, 0x25, 0xc0099153b0, 0x5)
/home/meyer9/go/src/github.com/dgraph-io/badger/txn.go:459 +0xe7
github.com/phoreproject/synapse/beacon/db.(*BadgerDB).GetBlockForHash(0xc00019c860, 0x2a0abcd72d14a037, 0x6233628c5f638bb7, 0xdde4a32f9bc5fd74, 0x9dedafce23b12fec, 0x0, 0x0, 0x0)
/home/meyer9/go/src/github.com/phoreproject/synapse/beacon/db/badger.go:71 +0x112
github.com/phoreproject/synapse/beacon.(*Blockchain).GetBlockByHash(...)
/home/meyer9/go/src/github.com/phoreproject/synapse/beacon/blockchain.go:352
github.com/phoreproject/synapse/beacon.(*ChainView).GetStateBySlot(0xc009a68420, 0x135, 0x1, 0x1, 0xc00ae6a840)
/home/meyer9/go/src/github.com/phoreproject/synapse/beacon/blockchain.go:566 +0x110
github.com/phoreproject/synapse/primitives.(*State).ProcessBlock(0xc011b46780, 0xc011826d80, 0x16bdd40, 0x1068400, 0xc009a68420, 0x0, 0x0, 0xc009a72000)
/home/meyer9/go/src/github.com/phoreproject/synapse/primitives/state.go:1969 +0xfbc
github.com/phoreproject/synapse/beacon.(*StateManager).AddBlockToStateMap(0xc0094f2000, 0xc011826d80, 0x6233628c5f638b00, 0xdde4a32f9bc5fd74, 0x9dedafce23b12fec, 0xc011b46300)
/home/meyer9/go/src/github.com/phoreproject/synapse/beacon/statemanager.go:194 +0x232
github.com/phoreproject/synapse/beacon.(*Blockchain).AddBlockToStateMap(...)
/home/meyer9/go/src/github.com/phoreproject/synapse/beacon/state.go:28
github.com/phoreproject/synapse/beacon.(*Blockchain).ProcessBlock(0xc00939a9f0, 0xc011826d80, 0x6233628c5f630001, 0xdde4a32f9bc5fd74, 0x9dedafce23b12fec)
/home/meyer9/go/src/github.com/phoreproject/synapse/beacon/state.go:75 +0x447
github.com/phoreproject/synapse/beacon.SyncManager.handleReceivedBlock(0xc0000b8140, 0x12a05f200, 0x0, 0xc00939a9f0, 0xc011826d80, 0xc009430980, 0xc00a7f9400, 0x0, 0x0)
/home/meyer9/go/src/github.com/phoreproject/synapse/beacon/syncmanager.go:313 +0x413
github.com/phoreproject/synapse/beacon.SyncManager.onMessageBlock(0xc0000b8140, 0x12a05f200, 0xc000187300, 0xc00939a9f0, 0xc009430980, 0x1063880, 0xc0114a0a00, 0xc0000c8160, 0xd99260)
/home/meyer9/go/src/github.com/phoreproject/synapse/beacon/syncmanager.go:270 +0x1401
github.com/phoreproject/synapse/p2p.(*HostNode).handleMessage(0xc0000b8140, 0xc009430980, 0x1063880, 0xc0114a0a00, 0x34001, 0xc0094db000)
/home/meyer9/go/src/github.com/phoreproject/synapse/p2p/hostnode.go:151 +0x3ea
github.com/phoreproject/synapse/p2p.(*HostNode).setupPeerNode.func5.1(0x1063880, 0xc0114a0a00, 0x1063880, 0xc0114a0a00)
/home/meyer9/go/src/github.com/phoreproject/synapse/p2p/hostnode.go:281 +0x47
github.com/phoreproject/synapse/p2p.processMessages(0xc0000330e0, 0xc00ae6df88, 0xc000050f70, 0xc000050f00)
/home/meyer9/go/src/github.com/phoreproject/synapse/p2p/messagehandler.go:126 +0x24a
github.com/phoreproject/synapse/p2p.(*HostNode).setupPeerNode.func5(0xc0000818d0, 0xc0000b8140, 0xc009430980, 0xc000033320, 0x4, 0x4)
/home/meyer9/go/src/github.com/phoreproject/synapse/p2p/hostnode.go:280 +0x96
created by github.com/phoreproject/synapse/p2p.(*HostNode).setupPeerNode
/home/meyer9/go/src/github.com/phoreproject/synapse/p2p/hostnode.go:279 +0x758
exit status 2
^C
Could be a problem with Goroutines not being cleaned up properly. Maybe we should use the context API?
Also, if you want to test it on your own machine, the command I'm using is:
go run cmd/beacon/synapsebeacon.go -genesistime 1557336342 -connect "/ip4/134.209.58.178/tcp/11781/ipfs/12D3KooWDW6ZvQYxhgu3i6ys6pqbwoP2YAkXJNYdcyis7nsfSSG9"
Synapse should close the database cleanly when CTRL-C is run.