forked from cerc-io/plugeth
Use locks to prevent concurrent map accesses
This commit is contained in:
parent
81f2c2023a
commit
34aa5df84d
@ -5,13 +5,17 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/plugins"
|
"github.com/ethereum/go-ethereum/plugins"
|
||||||
"github.com/ethereum/go-ethereum/log"
|
"github.com/ethereum/go-ethereum/log"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
freezerUpdates map[uint64]map[string]interface{}
|
freezerUpdates map[uint64]map[string]interface{}
|
||||||
|
lock sync.Mutex
|
||||||
)
|
)
|
||||||
|
|
||||||
func PluginTrackUpdate(num uint64, kind string, value interface{}) {
|
func PluginTrackUpdate(num uint64, kind string, value interface{}) {
|
||||||
|
lock.Lock()
|
||||||
|
defer lock.Unlock()
|
||||||
if freezerUpdates == nil { freezerUpdates = make(map[uint64]map[string]interface{}) }
|
if freezerUpdates == nil { freezerUpdates = make(map[uint64]map[string]interface{}) }
|
||||||
update, ok := freezerUpdates[num]
|
update, ok := freezerUpdates[num]
|
||||||
if !ok {
|
if !ok {
|
||||||
@ -21,11 +25,6 @@ func PluginTrackUpdate(num uint64, kind string, value interface{}) {
|
|||||||
update[kind] = value
|
update[kind] = value
|
||||||
}
|
}
|
||||||
|
|
||||||
func PluginResetUpdate(num uint64) {
|
|
||||||
delete(freezerUpdates, num)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
func pluginCommitUpdate(num uint64) {
|
func pluginCommitUpdate(num uint64) {
|
||||||
if plugins.DefaultPluginLoader == nil {
|
if plugins.DefaultPluginLoader == nil {
|
||||||
log.Warn("Attempting CommitUpdate, but default PluginLoader has not been initialized")
|
log.Warn("Attempting CommitUpdate, but default PluginLoader has not been initialized")
|
||||||
@ -35,6 +34,8 @@ func pluginCommitUpdate(num uint64) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func PluginCommitUpdate(pl *plugins.PluginLoader, num uint64) {
|
func PluginCommitUpdate(pl *plugins.PluginLoader, num uint64) {
|
||||||
|
lock.Lock()
|
||||||
|
defer lock.Unlock()
|
||||||
if freezerUpdates == nil { freezerUpdates = make(map[uint64]map[string]interface{}) }
|
if freezerUpdates == nil { freezerUpdates = make(map[uint64]map[string]interface{}) }
|
||||||
defer func() { delete(freezerUpdates, num) }()
|
defer func() { delete(freezerUpdates, num) }()
|
||||||
update, ok := freezerUpdates[num]
|
update, ok := freezerUpdates[num]
|
||||||
|
Loading…
Reference in New Issue
Block a user