db/pinned_iterators_manager.h: bugfix
Summary: std::unique(beg, end) returns an iterator of unique_end, data behind unique_end should not be accessed. Closes https://github.com/facebook/rocksdb/pull/1726 Differential Revision: D4371076 Pulled By: IslamAbdelRahman fbshipit-source-id: 5564450
This commit is contained in:
parent
906523d98a
commit
a738af8f84
@ -59,13 +59,11 @@ class PinnedIteratorsManager {
|
|||||||
|
|
||||||
// Remove duplicate pointers
|
// Remove duplicate pointers
|
||||||
std::sort(pinned_ptrs_.begin(), pinned_ptrs_.end());
|
std::sort(pinned_ptrs_.begin(), pinned_ptrs_.end());
|
||||||
std::unique(pinned_ptrs_.begin(), pinned_ptrs_.end());
|
auto unique_end = std::unique(pinned_ptrs_.begin(), pinned_ptrs_.end());
|
||||||
|
|
||||||
for (size_t i = 0; i < pinned_ptrs_.size(); i++) {
|
for (auto i = pinned_ptrs_.begin(); i != unique_end; ++i) {
|
||||||
assert(i == 0 || pinned_ptrs_[i].first != pinned_ptrs_[i - 1].first);
|
void* ptr = i->first;
|
||||||
|
ReleaseFunction release_func = i->second;
|
||||||
void* ptr = pinned_ptrs_[i].first;
|
|
||||||
ReleaseFunction release_func = pinned_ptrs_[i].second;
|
|
||||||
release_func(ptr);
|
release_func(ptr);
|
||||||
}
|
}
|
||||||
pinned_ptrs_.clear();
|
pinned_ptrs_.clear();
|
||||||
|
Loading…
Reference in New Issue
Block a user