• Martin Holst Swende's avatar
    core/rawdb: fix datarace in freezer (#22728) · 9b99e3df
    Martin Holst Swende authored
    The Append / truncate operations were racy. When a datafile reaches 2Gb, a new file is needed. For this operation, we require a writelock, which is not needed in the 99.99% of all cases where the data does fit in the current head-file.
    
    This transition from readlock to writelock was incorrect, and as the readlock was released, a truncate operation could slip in between, and truncate the data. This would have been fine, however, the Append operation continued writing as if no truncation had occurred, e.g writing item 5 where item 0 should reside.
    
    This PR changes the behaviour, so that if when we run into the situation that a new file is needed, it aborts, and retries, this time with a writelock.
    
    The outcome of the situation described above, running on this PR, would instead be that the Append operation exits with a failure.
    9b99e3df
Name
Last commit
Last update
..
asm Loading commit data...
bloombits Loading commit data...
forkid Loading commit data...
rawdb Loading commit data...
state Loading commit data...
types Loading commit data...
vm Loading commit data...
.gitignore Loading commit data...
bench_test.go Loading commit data...
block_validator.go Loading commit data...
block_validator_test.go Loading commit data...
blockchain.go Loading commit data...
blockchain_insert.go Loading commit data...
blockchain_repair_test.go Loading commit data...
blockchain_sethead_test.go Loading commit data...
blockchain_snapshot_test.go Loading commit data...
blockchain_test.go Loading commit data...
blocks.go Loading commit data...
bloom_indexer.go Loading commit data...
chain_indexer.go Loading commit data...
chain_indexer_test.go Loading commit data...
chain_makers.go Loading commit data...
chain_makers_test.go Loading commit data...
dao_test.go Loading commit data...
error.go Loading commit data...
events.go Loading commit data...
evm.go Loading commit data...
gaspool.go Loading commit data...
gen_genesis.go Loading commit data...
gen_genesis_account.go Loading commit data...
genesis.go Loading commit data...
genesis_alloc.go Loading commit data...
genesis_test.go Loading commit data...
headerchain.go Loading commit data...
headerchain_test.go Loading commit data...
mkalloc.go Loading commit data...
rlp_test.go Loading commit data...
state_prefetcher.go Loading commit data...
state_processor.go Loading commit data...
state_processor_test.go Loading commit data...
state_transition.go Loading commit data...
tx_cacher.go Loading commit data...
tx_journal.go Loading commit data...
tx_list.go Loading commit data...
tx_list_test.go Loading commit data...
tx_noncer.go Loading commit data...
tx_pool.go Loading commit data...
tx_pool_test.go Loading commit data...
types.go Loading commit data...