diff --git a/src/bees-context.cc b/src/bees-context.cc index f805625..0f3c629 100644 --- a/src/bees-context.cc +++ b/src/bees-context.cc @@ -187,20 +187,20 @@ BeesContext::is_root_ro(uint64_t root) } bool -BeesContext::dedup(const BeesRangePair &brp) +BeesContext::dedup(const BeesRangePair &brp_in) { // TOOLONG and NOTE can retroactively fill in the filename details, but LOG can't - BEESNOTE("dedup " << brp); + BEESNOTE("dedup " << brp_in); - brp.second.fd(shared_from_this()); - - if (is_root_ro(brp.second.fid().root())) { - // BEESLOGDEBUG("WORKAROUND: dst root is read-only in " << name_fd(brp.second.fd())); + if (is_root_ro(brp_in.second.fid().root())) { + // BEESLOGDEBUG("WORKAROUND: dst root " << (brp_in.second.fid().root()) << " is read-only); BEESCOUNT(dedup_workaround_btrfs_send); return false; } + auto brp = brp_in; brp.first.fd(shared_from_this()); + brp.second.fd(shared_from_this()); BEESTOOLONG("dedup " << brp); @@ -725,23 +725,22 @@ BeesContext::scan_one_extent(const BeesFileRange &bfr, const Extent &e) } BeesFileRange -BeesContext::scan_forward(const BeesFileRange &bfr) +BeesContext::scan_forward(const BeesFileRange &bfr_in) { - // What are we doing here? - BEESTRACE("scan_forward " << bfr); + BEESTRACE("scan_forward " << bfr_in); BEESCOUNT(scan_forward); Timer scan_timer; // Silently filter out blacklisted files - if (is_blacklisted(bfr.fid())) { + if (is_blacklisted(bfr_in.fid())) { BEESCOUNT(scan_blacklisted); - return bfr; + return bfr_in; } - BEESNOTE("scan open " << bfr); - // Reconstitute FD + BEESNOTE("scan open " << bfr_in); + auto bfr = bfr_in; bfr.fd(shared_from_this()); BEESNOTE("scan extent " << bfr); diff --git a/src/bees-resolve.cc b/src/bees-resolve.cc index 66608b7..0d4d2dc 100644 --- a/src/bees-resolve.cc +++ b/src/bees-resolve.cc @@ -385,14 +385,15 @@ BeesResolver::for_each_extent_ref(BeesBlockData bbd, function bool { + for_each_extent_ref(bbd, [&](const BeesFileRange &src_bfr_in) -> bool { // Open src - BEESNOTE("Opening src bfr " << src_bfr); - BEESTRACE("Opening src bfr " << src_bfr); + BEESNOTE("Opening src bfr " << src_bfr_in); + BEESTRACE("Opening src bfr " << src_bfr_in); + auto src_bfr = src_bfr_in; src_bfr.fd(m_ctx); if (dst_bfr.overlaps(src_bfr)) { diff --git a/src/bees-types.cc b/src/bees-types.cc index f3f1c86..23c3146 100644 --- a/src/bees-types.cc +++ b/src/bees-types.cc @@ -287,7 +287,7 @@ BeesFileRange::fd() const } Fd -BeesFileRange::fd(const shared_ptr &ctx) const +BeesFileRange::fd(const shared_ptr &ctx) { // If we don't have a fid we can't do much here if (m_fid) { diff --git a/src/bees.h b/src/bees.h index 3d920f8..6d7a66e 100644 --- a/src/bees.h +++ b/src/bees.h @@ -260,7 +260,7 @@ ostream& operator<<(ostream &os, const BeesFileId &bfi); class BeesFileRange { protected: - mutable Fd m_fd; + Fd m_fd; mutable BeesFileId m_fid; off_t m_begin = 0, m_end = 0; mutable off_t m_file_size = -1; @@ -301,7 +301,7 @@ public: Fd fd() const; // Get the fd, opening it if necessary - Fd fd(const shared_ptr &ctx) const; + Fd fd(const shared_ptr &ctx); BeesFileRange copy_closed() const;