Summary:
Currently RocksDB reset async_read_in_progress_ in callback
due to which underlying filesystem relying on Poll API won't be called
leading to stale memory access.
In order to fix it, async_read_in_progress_ will be reset after Poll API
is called to make sure underlying file_system waiting on Poll can clear
its state or take appropriate action.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/9815
Test Plan: CircleCI tests
Reviewed By: anand1976
Differential Revision:
D35451534
Pulled By: akankshamahajan15
fbshipit-source-id:
b70ef6251a7aa9ed4876ba5e5100baa33d7d474c
handles.emplace_back(io_handle_);
fs_->Poll(handles, 1).PermitUncheckedError();
}
- // Release io_handle_ after the Poll API as request has been completed.
+
+ // Reset and Release io_handle_ after the Poll API as request has been
+ // completed.
+ async_read_in_progress_ = false;
if (io_handle_ != nullptr && del_fn_ != nullptr) {
del_fn_(io_handle_);
io_handle_ = nullptr;
void FilePrefetchBuffer::PrefetchAsyncCallback(const FSReadRequest& req,
void* /*cb_arg*/) {
- async_read_in_progress_ = false;
uint32_t index = curr_ ^ 1;
if (req.status.ok()) {
if (req.offset + req.result.size() <=