58 bool has_waiting_sync =
false;
59 int waiting_count = 0;
60 for (
auto& keyValuePair :
m_map) {
61 MiscNode_TBE&
tbe = keyValuePair.second;
63 switch (
tbe.getstate()) {
64 case MiscNode_State_DvmSync_Distributing:
65 case MiscNode_State_DvmNonSync_Distributing:
68 case MiscNode_State_DvmSync_ReadyToDist:
69 ready_sync_tbes.push_back(&
tbe);
71 case MiscNode_State_DvmNonSync_ReadyToDist:
72 ready_nonsync_tbes.push_back(&
tbe);
74 potential_sync_dependency_tbes.push_back(&
tbe);
76 case MiscNode_State_DvmSync_Waiting:
77 has_waiting_sync =
true;
80 case MiscNode_State_DvmNonSync_Waiting:
83 potential_sync_dependency_tbes.push_back(&
tbe);
93 assert(waiting_count <= 4);
94 if (waiting_count == 4) {
99 if (has_waiting_sync) {
100 ready_sync_tbes.clear();
108 auto hasNonSyncDependency = [&](
const MiscNode_TBE* sync_tbe) {
109 for (
const auto* potential_dep : potential_sync_dependency_tbes) {
110 if (sync_tbe->gettimestamp() > potential_dep->gettimestamp() &&
111 sync_tbe->getrequestor() == potential_dep->getrequestor()) {
123 ready_sync_tbes.erase(
124 std::remove_if(ready_sync_tbes.begin(), ready_sync_tbes.end(),
125 hasNonSyncDependency),
126 ready_sync_tbes.end()
132 ready_nonsync_tbes.insert(ready_nonsync_tbes.end(),
133 ready_sync_tbes.begin(), ready_sync_tbes.end());
136 if (ready_nonsync_tbes.empty())
140 auto it = std::min_element(
141 ready_nonsync_tbes.begin(), ready_nonsync_tbes.end(),
142 [](
const MiscNode_TBE*
a,
const MiscNode_TBE*
b) {
143 return a->gettimestamp() - b->gettimestamp();
146 assert(it != ready_nonsync_tbes.end());