vinyl: fix use-after-free of LSM tree in scheduler #10012
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Between picking an LSM tree from a heap and taking a reference to it in
vy_task_new()
there are a few places where the scheduler may yield:vy_worker_pool_get()
to start a worker pool;vy_task_dump_new()
to wait for a memory tree to be unpinned;vy_task_compaction_new()
to commit an entry to the metadata log after splitting or coalescing a range.If a concurrent fiber drops and deletes the LSM tree in the meanwhile, the scheduler will crash. To avoid that, let's take a reference to the LSM tree.
It's quite difficult to write a functional test for it without a bunch of ugly error injections so we rely on fuzzing tests.
Closes #9995