diff --git a/reader_concurrency_semaphore.cc b/reader_concurrency_semaphore.cc index 13c7c4ca29..81af115aa3 100644 --- a/reader_concurrency_semaphore.cc +++ b/reader_concurrency_semaphore.cc @@ -1241,6 +1241,12 @@ std::string reader_concurrency_semaphore::dump_diagnostics(unsigned max_lines) c return os.str(); } +void reader_concurrency_semaphore::foreach_permit(noncopyable_function func) { + for (auto& p : _permit_list) { + func(reader_permit(p.shared_from_this())); + } +} + // A file that tracks the memory usage of buffers resulting from read // operations. class tracking_file_impl : public file_impl { diff --git a/reader_concurrency_semaphore.hh b/reader_concurrency_semaphore.hh index 66fbafdbe4..bffbff1876 100644 --- a/reader_concurrency_semaphore.hh +++ b/reader_concurrency_semaphore.hh @@ -526,4 +526,6 @@ public: uint64_t active_reads() const noexcept { return _stats.current_permits - _stats.inactive_reads - waiters(); } + + void foreach_permit(noncopyable_function func); };