break;
}
}
- complete = (m_current_ops == 0);
+ complete = (m_current_ops == 0) && !m_updating_progress;
}
if (complete) {
}
} else {
m_copied_objects.push(object_no);
- while (m_copied_objects.top() ==
+ while (!m_updating_progress && m_copied_objects.top() ==
(m_object_number ? *m_object_number + 1 : 0)) {
m_object_number = m_copied_objects.top();
m_copied_objects.pop();
- m_prog_ctx->update_progress(*m_object_number + 1, m_end_object_no);
+ uint64_t progress_object_no = *m_object_number + 1;
+ m_updating_progress = true;
+ m_lock.Unlock();
+ m_prog_ctx->update_progress(progress_object_no, m_end_object_no);
+ m_lock.Lock();
+ assert(m_updating_progress);
+ m_updating_progress = false;
}
}
send_next_object_copy();
- complete = (m_current_ops == 0);
+ complete = (m_current_ops == 0) && !m_updating_progress;
}
if (complete) {
uint64_t m_current_ops = 0;
std::priority_queue<
uint64_t, std::vector<uint64_t>, std::greater<uint64_t>> m_copied_objects;
+ bool m_updating_progress = false;
SnapMap m_snap_map;
int m_ret_val = 0;