in platform/consensus/execution/duplicate_manager.cpp [105:142]
void DuplicateManager::UpdateRecentHash() {
uint64_t time = GetCurrentTime();
while (!IsStop()) {
time = time + frequency_useconds_;
auto sleep_time = time - GetCurrentTime();
usleep(sleep_time);
while (true) {
std::lock_guard<std::mutex> lk(prop_mutex_);
if (!proposed_hash_time_queue_.empty()) {
auto it = proposed_hash_time_queue_.front();
if (it.second + window_useconds_ < time) {
proposed_hash_time_queue_.pop();
proposed_hash_set_.erase(it.first);
} else {
break;
}
} else {
break;
}
}
while (true) {
std::lock_guard<std::mutex> lk(exec_mutex_);
if (!executed_hash_time_queue_.empty()) {
auto it = executed_hash_time_queue_.front();
if (it.second + window_useconds_ < time) {
executed_hash_time_queue_.pop();
executed_hash_set_.erase(it.first);
executed_hash_seq_.erase(it.first);
} else {
break;
}
} else {
break;
}
}
}
}