From c1372661a92b8d2ba3bc977ebbabf52127354bea Mon Sep 17 00:00:00 2001 From: Brian Norris Date: Thu, 24 Jan 2013 17:26:28 -0800 Subject: [PATCH] cyclegraph: separate an 'addEdge(CycleNode *, CycleNode *) function We need to represent edge addition as a low-level operation on CycleNodes, not just on ModelActions. --- cyclegraph.cc | 16 +++++++++++----- cyclegraph.h | 1 + 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/cyclegraph.cc b/cyclegraph.cc index 66f9f695..62cef7c5 100644 --- a/cyclegraph.cc +++ b/cyclegraph.cc @@ -62,6 +62,16 @@ void CycleGraph::addEdge(const ModelAction *from, const ModelAction *to) CycleNode *fromnode = getNode(from); CycleNode *tonode = getNode(to); + addEdge(fromnode, tonode); +} + +/** + * Adds an edge between two CycleNodes. + * @param fromnode The edge comes from this CycleNode + * @param tonode The edge points to this CycleNode + */ +void CycleGraph::addEdge(CycleNode *fromnode, CycleNode *tonode) +{ if (!hasCycles) hasCycles = checkReachable(tonode, fromnode); @@ -117,11 +127,7 @@ void CycleGraph::addRMWEdge(const ModelAction *from, const ModelAction *rmw) } } - if (!hasCycles) - hasCycles = checkReachable(rmwnode, fromnode); - - if (fromnode->addEdge(rmwnode)) - rollbackvector.push_back(fromnode); + addEdge(fromnode, rmwnode); } #if SUPPORT_MOD_ORDER_DUMP diff --git a/cyclegraph.h b/cyclegraph.h index 45e49fb7..8668077e 100644 --- a/cyclegraph.h +++ b/cyclegraph.h @@ -40,6 +40,7 @@ class CycleGraph { SNAPSHOTALLOC private: + void addEdge(CycleNode *fromnode, CycleNode *tonode); void putNode(const ModelAction *act, CycleNode *node); CycleNode * getNode(const ModelAction *); HashTable *discovered; -- 2.34.1