@@ -93,6 +93,8 @@ namespace osmium {
9393 std::atomic<std::size_t > m_file_size{0 };
9494 std::atomic<std::size_t > m_offset{0 };
9595
96+ std::atomic_bool m_want_buffered_pages_removed{true };
97+
9698 public:
9799
98100 enum {
@@ -133,6 +135,14 @@ namespace osmium {
133135 m_offset = offset;
134136 }
135137
138+ bool want_buffered_pages_removed () const noexcept {
139+ return m_want_buffered_pages_removed;
140+ }
141+
142+ void set_want_buffered_pages_removed (bool value) noexcept {
143+ m_want_buffered_pages_removed = value;
144+ }
145+
136146 }; // class Decompressor
137147
138148 /* *
@@ -352,7 +362,9 @@ namespace osmium {
352362 }
353363 } else {
354364 buffer.resize (osmium::io::Decompressor::input_buffer_size);
355- osmium::io::detail::remove_buffered_pages (m_fd, m_offset);
365+ if (want_buffered_pages_removed ()) {
366+ osmium::io::detail::remove_buffered_pages (m_fd, m_offset);
367+ }
356368 const auto nread = detail::reliable_read (m_fd, &*buffer.begin (), osmium::io::Decompressor::input_buffer_size);
357369 buffer.resize (std::string::size_type (nread));
358370 }
@@ -365,7 +377,9 @@ namespace osmium {
365377
366378 void close () override {
367379 if (m_fd >= 0 ) {
368- osmium::io::detail::remove_buffered_pages (m_fd);
380+ if (want_buffered_pages_removed ()) {
381+ osmium::io::detail::remove_buffered_pages (m_fd);
382+ }
369383 const int fd = m_fd;
370384 m_fd = -1 ;
371385 osmium::io::detail::reliable_close (fd);
0 commit comments