aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/node
diff options
context:
space:
mode:
authorRenaud G <renaud@rolisteam.org>2017-12-13 00:44:24 +0100
committerRenaud G <renaud@rolisteam.org>2017-12-13 00:44:24 +0100
commit5f3d391c3dce4e47169499de156228e0cbfe933a (patch)
treeae2cbf01f3cdd41735a015f12629fba78133e759 /node
parent6eb1d04d83bd97f5dcc335c018f25c5d2439b5ac (diff)
downloadOneRoll-5f3d391c3dce4e47169499de156228e0cbfe933a.tar.gz
OneRoll-5f3d391c3dce4e47169499de156228e0cbfe933a.zip
-prevent endless loop in result parsing.
Diffstat (limited to 'node')
-rw-r--r--node/mergenode.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/node/mergenode.cpp b/node/mergenode.cpp
index 362a23a..e2d46cb 100644
--- a/node/mergenode.cpp
+++ b/node/mergenode.cpp
@@ -31,6 +31,7 @@ void MergeNode::run(ExecutionNode* previous)
m_previousNode = previous;
m_result->setPrevious(previous->getResult());
ExecutionNode* previousLast =nullptr;
+ std::vector<Result*> pastResult;
for(auto start : *m_startList)
{
ExecutionNode* last = getLatestNode(start);
@@ -62,7 +63,19 @@ void MergeNode::run(ExecutionNode* previous)
}
}
}
- tmpResult = tmpResult->getPrevious();
+ auto it = std::find_if(pastResult.begin(),pastResult.end(),[tmpResult](const Result* a){
+ return (a == tmpResult->getPrevious());
+ });
+ if(it == pastResult.end())
+ {
+ pastResult.push_back(previousLast->getResult());
+ tmpResult = tmpResult->getPrevious();
+ }
+ else
+ {
+ tmpResult->setPrevious(nullptr);
+ tmpResult = nullptr;
+ }
}
}
}