mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-22 20:56:42 +00:00
`conversionQueue` is meant to run billy/legacy migrations serially on a single worker. On each `startConversion`, it currently always calls `runNextTask()`, which overwrites `taskDone` and starts another goroutine even when a migration is already running. That breaks two invariants during an upgrade with legacy entries in both the main store and limbo: 1. Migrations intended to be serial can run concurrently. 2. `close()` only waits for the most recently launched task, so shutdown can close the stores while a forgotten migration is still using them. Only start the next queued migration when no task is active (`taskDone == nil`). The existing `taskDone` completion path then advances the queue, and `close` reliably waits for the active task. |
||
|---|---|---|
| .. | ||
| blobpool.go | ||
| blobpool_test.go | ||
| buffer.go | ||
| buffer_test.go | ||
| cache.go | ||
| cache_test.go | ||
| config.go | ||
| conversion.go | ||
| conversion_test.go | ||
| evictheap.go | ||
| evictheap_test.go | ||
| interface.go | ||
| limbo.go | ||
| limbo_test.go | ||
| lookup.go | ||
| metrics.go | ||
| priority.go | ||
| priority_test.go | ||
| slotter.go | ||
| slotter_test.go | ||