go-ethereum/core/state
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
..
pruner all: improve ETA calculation across all progress indicators (#32521) 2025-09-01 13:47:02 +08:00
snapshot core/state/snapshot: make diskLayer.stopGeneration idempotent 2026-05-13 13:01:45 +05:30
access_events.go trie, go.mod: remove all references to go-verkle and go-ipa (#33461) 2025-12-30 20:44:04 +08:00
access_events_test.go trie, go.mod: remove all references to go-verkle and go-ipa (#33461) 2025-12-30 20:44:04 +08:00
access_list.go core/state: improve accessList copy (#33024) 2025-10-26 16:13:59 +08:00
database.go core/state: export StateUpdate struct (#34724) 2026-04-20 17:12:10 +02:00
database_code.go core, miner, tests: introduce codedb and simplify cachingDB (#33816) 2026-03-10 08:29:21 +01:00
database_history.go core/state: export StateUpdate struct (#34724) 2026-04-20 17:12:10 +02:00
database_iterator.go core/state: export StateUpdate struct (#34724) 2026-04-20 17:12:10 +02:00
database_iterator_test.go core/state: export StateUpdate struct (#34724) 2026-04-20 17:12:10 +02:00
database_mpt.go core/state: export StateUpdate struct (#34724) 2026-04-20 17:12:10 +02:00
database_ubt.go trie: group 2^N binary trie nodes in serialization (#34794) 2026-05-01 15:28:19 +02:00
dump.go core/state: export StateUpdate struct (#34724) 2026-04-20 17:12:10 +02:00
iterator.go core, miner, tests: introduce codedb and simplify cachingDB (#33816) 2026-03-10 08:29:21 +01:00
iterator_test.go core/state: state reader abstraction (#29761) 2024-09-05 13:10:47 +03:00
journal.go core: miner: reduce allocations in block building (#33375) 2026-02-03 08:19:16 +01:00
metrics.go core/rawdb,state: add preimage miss metric (#31295) 2025-03-07 11:23:19 +01:00
reader.go trie: group 2^N binary trie nodes in serialization (#34794) 2026-05-01 15:28:19 +02:00
reader_eip_7928.go core: implement BAL reader for prefetching (#33737) 2026-04-28 13:10:15 +02:00
reader_eip_7928_test.go core: implement BAL reader for prefetching (#33737) 2026-04-28 13:10:15 +02:00
reader_stater.go core, miner, tests: introduce codedb and simplify cachingDB (#33816) 2026-03-10 08:29:21 +01:00
state_object.go core/state: opt stateObject.GetState (#34825) 2026-04-28 20:33:40 +08:00
state_object_test.go core/state: using testing.B.Loop (#32658) 2025-09-19 16:57:43 -06:00
state_sizer.go core/state: export StateUpdate struct (#34724) 2026-04-20 17:12:10 +02:00
state_sizer_test.go core/state: export StateUpdate struct (#34724) 2026-04-20 17:12:10 +02:00
state_test.go core, consensus/beacon: defer trie resolution (#31725) 2025-06-25 09:42:11 +08:00
statedb.go core/state: fix StateDB Reader Error Discard After Commit (#34899) 2026-05-07 18:40:26 -04:00
statedb_fuzz_test.go core/state: export StateUpdate struct (#34724) 2026-04-20 17:12:10 +02:00
statedb_hooked.go core: track the state access footprint (#34776) 2026-04-22 13:42:49 +08:00
statedb_hooked_test.go core: invoke selfdestruct tracer hooks during finalisation (#32919) 2026-01-16 15:10:08 -07:00
statedb_test.go core/state: handle *bintrie.BinaryTrie in mustCopyTrie (#34758) 2026-04-18 18:47:22 +02:00
stateupdate.go core/state: export StateUpdate struct (#34724) 2026-04-20 17:12:10 +02:00
sync.go core,eth,internal: fix typo (#29024) 2024-02-20 19:42:48 +08:00
sync_test.go core, miner, tests: introduce codedb and simplify cachingDB (#33816) 2026-03-10 08:29:21 +01:00
transient_storage.go core/state: optimize transient storage (#33695) 2026-04-14 15:39:42 +02:00
trie_prefetcher.go cmd, core, trie, triedb: split CachingDB into merkle + binary dbs. (#34700) 2026-04-17 08:55:54 +08:00
trie_prefetcher_test.go cmd, core, trie, triedb: split CachingDB into merkle + binary dbs. (#34700) 2026-04-17 08:55:54 +08:00