go-ethereum/core
ozpool 963d78dfcc core/state/snapshot: make diskLayer.stopGeneration idempotent
Fixes the deadlock noted by the "TODO this function will hang if it's
called twice" markers in Tree.Disable and Tree.Rebuild. Both paths walk
every layer in the tree and unconditionally invoke stopGeneration on
each disk layer, so a layer reachable through both must tolerate a
second call.

The previous implementation sent on the unbuffered genAbort channel
whenever genMarker was non-nil. After the first abort handshake the
generator goroutine exits, but genMarker is only cleared on the
successful-completion path (generate.go), not on the aborted-mid-flight
path. A second stopGeneration therefore saw generating=true, sent on
genAbort with no receiver, and blocked forever.

Wrap the abort handshake in a sync.Once on the disk layer. The first
call drives the handshake exactly as before; subsequent calls are
no-ops. Remove both TODO comments now that the contract is honoured.

Adds TestStopGenerationIdempotent: stands in a mock generator goroutine
that consumes a single abort, calls stopGeneration twice, and fails
with an explicit message at a 5s deadline rather than hanging until
the test runner's outer timeout.

Fixes #33233.
2026-05-13 13:01:45 +05:30
..
filtermaps core/filtermaps: remove dead condition check (#34695) 2026-04-10 17:41:59 +02:00
forkid params: set osaka and BPO1 & BPO2 mainnet dates (#33063) 2025-11-03 17:41:22 +01:00
history cmd/geth: add Prague pruning points for hoodi (#34714) 2026-04-14 14:58:27 +02:00
overlay cmd, core, trie, triedb: split CachingDB into merkle + binary dbs. (#34700) 2026-04-17 08:55:54 +08:00
rawdb core/rawdb: clarify ReadLastPivotNumber comment (#34773) 2026-04-21 09:19:03 +08:00
state core/state/snapshot: make diskLayer.stopGeneration idempotent 2026-05-13 13:01:45 +05:30
stateless core/stateless: fix parsing an empty witness (#34683) 2026-04-09 09:19:54 +08:00
tracing core/vm, eth, tests: introduce gas budget (#34712) 2026-04-20 15:33:29 +08:00
txpool core/txpool/blobpool: add blobTxForPool type (#34882) 2026-05-12 13:59:33 +02:00
types core/types/bal: update the BAL definition to the latest spec (#34799) 2026-04-26 23:32:39 +08:00
vm core/vm: implement stack arena (#33960) 2026-04-28 11:10:44 +02:00
.gitignore Renamed chain => core 2014-12-04 10:28:02 +01:00
bench_test.go core: implement eip-7981: Increase Access List Cost (#34755) 2026-05-06 12:03:11 +02:00
bintrie_witness_test.go core: implement eip-7981: Increase Access List Cost (#34755) 2026-05-06 12:03:11 +02:00
block_validator.go core,miner: implement EIP-7934 - RLP Execution Block Size Limit (#31990) 2025-07-09 11:24:44 +02:00
block_validator_test.go eth/catalyst: add initial OpenTelemetry tracing for newPayload (#33521) 2026-02-17 17:08:57 +01:00
blockchain.go core: write head hash to db after snap sync is complete (#34912) 2026-05-12 10:05:39 +08:00
blockchain_insert.go core: remove unused peek function in insertIterator (#33155) 2025-11-12 15:30:16 +08:00
blockchain_reader.go cmd, core, trie, triedb: split CachingDB into merkle + binary dbs. (#34700) 2026-04-17 08:55:54 +08:00
blockchain_repair_test.go core: consolidate BlockChain constructor options (#31925) 2025-06-19 12:21:15 +02:00
blockchain_sethead_test.go core, miner, tests: introduce codedb and simplify cachingDB (#33816) 2026-03-10 08:29:21 +01:00
blockchain_snapshot_test.go triedb/pathdb, eth: use double-buffer mechanism in pathdb (#30464) 2025-06-22 20:40:54 +08:00
blockchain_stats.go core, miner, tests: introduce codedb and simplify cachingDB (#33816) 2026-03-10 08:29:21 +01:00
blockchain_test.go cmd, core, trie, triedb: split CachingDB into merkle + binary dbs. (#34700) 2026-04-17 08:55:54 +08:00
chain_makers.go cmd, core, internal, miner: wrap pre/post-execution (#34812) 2026-05-11 16:17:48 -04:00
chain_makers_test.go core: consolidate BlockChain constructor options (#31925) 2025-06-19 12:21:15 +02:00
dao_test.go core: consolidate BlockChain constructor options (#31925) 2025-06-19 12:21:15 +02:00
error.go core, internal/ethapi: fix incorrect max-initcode RPC error mapping (#34067) 2026-03-23 22:10:32 +08:00
eth_transfer_logs_test.go core, core/vm: implement EIP-7708 (#33645) 2026-03-23 22:29:53 +08:00
events.go ethstats: report newPayload processing time to stats server (#33395) 2026-01-05 17:49:30 +01:00
evm.go core: use uint256 in core.Message (#34934) 2026-05-11 22:25:57 +08:00
gaspool.go core: implement eip-7778: block gas accounting without refunds (#33593) 2026-03-04 18:18:18 +08:00
gen_genesis.go core/vm: implement eip-7843: SLOTNUM (#33589) 2026-02-26 13:53:46 +01:00
genesis.go trie: group 2^N binary trie nodes in serialization (#34794) 2026-05-01 15:28:19 +02:00
genesis_alloc.go params: add hoodi testnet definition (#31406) 2025-03-18 12:07:49 +01:00
genesis_test.go trie: group 2^N binary trie nodes in serialization (#34794) 2026-05-01 15:28:19 +02:00
headerchain.go core/rawdb: reduce allocations in rawdb.ReadHeaderNumber (#31913) 2025-07-15 15:48:36 +02:00
headerchain_test.go core/state, core/tracing: new state update hook (#33490) 2026-01-08 11:07:19 +08:00
mkalloc.go accounts, cmd/geth, core: close opened files (#29598) 2024-04-30 15:47:21 +02:00
rlp_test.go crypto/keccak: vendor in golang.org/x/crypto/sha3 (#33323) 2026-02-03 14:55:27 -07:00
sender_cacher.go core: use sync.Once for SenderCacher initialization (#31029) 2025-01-16 14:36:45 +01:00
state_prefetcher.go core/vm: implement stack arena (#33960) 2026-04-28 11:10:44 +02:00
state_processor.go cmd, core, internal, miner: wrap pre/post-execution (#34812) 2026-05-11 16:17:48 -04:00
state_processor_test.go core/vm: implement eip-7843: SLOTNUM (#33589) 2026-02-26 13:53:46 +01:00
state_transition.go core: use uint256 in core.Message (#34934) 2026-05-11 22:25:57 +08:00
state_transition_test.go core: implement eip-7981: Increase Access List Cost (#34755) 2026-05-06 12:03:11 +02:00
stateless.go core: fix code database initialization in stateless mode (#34011) 2026-03-16 09:45:26 +01:00
txindexer.go core/rawdb: reduce allocations in rawdb.ReadHeaderNumber (#31913) 2025-07-15 15:48:36 +02:00
txindexer_test.go core/rawdb: integrate eradb backend for RPC (#31604) 2025-06-03 10:47:38 +02:00
types.go eth/catalyst: add initial OpenTelemetry tracing for newPayload (#33521) 2026-02-17 17:08:57 +01:00