diff options
| author | 2017-12-13 00:44:24 +0100 | |
|---|---|---|
| committer | 2017-12-13 00:44:24 +0100 | |
| commit | 5f3d391c3dce4e47169499de156228e0cbfe933a (patch) | |
| tree | ae2cbf01f3cdd41735a015f12629fba78133e759 /node | |
| parent | 6eb1d04d83bd97f5dcc335c018f25c5d2439b5ac (diff) | |
| download | OneRoll-5f3d391c3dce4e47169499de156228e0cbfe933a.tar.gz OneRoll-5f3d391c3dce4e47169499de156228e0cbfe933a.zip | |
-prevent endless loop in result parsing.
Diffstat (limited to 'node')
| -rw-r--r-- | node/mergenode.cpp | 15 |
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; + } } } } |