diff options
Diffstat (limited to 'src/osdc/Journaler.cc')
-rw-r--r-- | src/osdc/Journaler.cc | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/osdc/Journaler.cc b/src/osdc/Journaler.cc index ba4ca8dc4b9..badfb3c54e8 100644 --- a/src/osdc/Journaler.cc +++ b/src/osdc/Journaler.cc @@ -405,12 +405,17 @@ void Journaler::_finish_flush(int r, uint64_t start, utime_t stamp) } // adjust safe_pos - assert(pending_safe.count(start)); - pending_safe.erase(start); - if (pending_safe.empty()) - safe_pos = flush_pos; - else - safe_pos = *pending_safe.begin(); + std::set<uint64_t>::iterator start_iter = pending_safe.find(start); + assert(start_iter != pending_safe.end()); + if (start_iter == pending_safe.begin()) { + pending_safe.erase(start_iter); + if (pending_safe.empty()) + safe_pos = flush_pos; + else + safe_pos = *pending_safe.begin(); + } else { + pending_safe.erase(start_iter); + } ldout(cct, 10) << "_finish_flush safe from " << start << ", pending_safe " << pending_safe |