import (
"context"
+ "errors"
"net/http"
_ "net/http/pprof"
"os"
"path/filepath"
"time"
+ "github.com/prometheus/prometheus/util/flock"
log "github.com/sirupsen/logrus"
cmn "github.com/tendermint/tmlibs/common"
dbm "github.com/tendermint/tmlibs/db"
func NewNode(config *cfg.Config) *Node {
ctx := context.Background()
+ if err := lockDataDirectory(config); err != nil {
+ cmn.Exit("Error: " + err.Error())
+ }
initLogFile(config)
initActiveNetParams(config)
// Get store
return node
}
+// Lock data directory after daemonization
+func lockDataDirectory(config *cfg.Config) error {
+ _, _, err := flock.New(filepath.Join(config.RootDir, "LOCK"))
+ if err != nil {
+ return errors.New("datadir already used by another process")
+ }
+ return nil
+}
+
func initActiveNetParams(config *cfg.Config) {
var exist bool
consensus.ActiveNetParams, exist = consensus.NetParams[config.ChainID]