@@ -32,17 +32,19 @@ type RecordingKV struct {
32
32
inner * triedb.Database
33
33
diskDb ethdb.KeyValueStore
34
34
readDbEntries map [common.Hash ][]byte
35
+ mutex sync.Mutex
35
36
enableBypass bool
36
37
}
37
38
38
39
func newRecordingKV (inner * triedb.Database , diskDb ethdb.KeyValueStore ) * RecordingKV {
39
- return & RecordingKV {inner , diskDb , make (map [common.Hash ][]byte ), false }
40
+ return & RecordingKV {inner , diskDb , make (map [common.Hash ][]byte ), sync. Mutex {}, false }
40
41
}
41
42
42
43
func (db * RecordingKV ) Has (key []byte ) (bool , error ) {
43
44
return false , errors .New ("recording KV doesn't support Has" )
44
45
}
45
46
47
+ // Get may be called concurrently with other Get calls
46
48
func (db * RecordingKV ) Get (key []byte ) ([]byte , error ) {
47
49
var hash common.Hash
48
50
var res []byte
@@ -66,6 +68,8 @@ func (db *RecordingKV) Get(key []byte) ([]byte, error) {
66
68
if crypto .Keccak256Hash (res ) != hash {
67
69
return nil , fmt .Errorf ("recording KV attempted to access non-hash key %v" , hash )
68
70
}
71
+ db .mutex .Lock ()
72
+ defer db .mutex .Unlock ()
69
73
db .readDbEntries [hash ] = res
70
74
return res , nil
71
75
}
@@ -190,7 +194,7 @@ func (r *RecordingDatabase) StateFor(header *types.Header) (*state.StateDB, erro
190
194
r .mutex .Lock ()
191
195
defer r .mutex .Unlock ()
192
196
193
- sdb , err := state .NewDeterministic (header .Root , r .db )
197
+ sdb , err := state .NewRecording (header .Root , r .db )
194
198
if err == nil {
195
199
r .referenceRootLockHeld (header .Root )
196
200
}
@@ -263,7 +267,7 @@ func (r *RecordingDatabase) PrepareRecording(ctx context.Context, lastBlockHeade
263
267
if lastBlockHeader != nil {
264
268
prevRoot = lastBlockHeader .Root
265
269
}
266
- recordingStateDb , err := state .NewDeterministic (prevRoot , recordingStateDatabase )
270
+ recordingStateDb , err := state .NewRecording (prevRoot , recordingStateDatabase )
267
271
if err != nil {
268
272
return nil , nil , nil , fmt .Errorf ("failed to create recordingStateDb: %w" , err )
269
273
}
0 commit comments