This is an automated email from the ASF dual-hosted git repository.

mariofusco pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git


The following commit(s) were added to refs/heads/main by this push:
     new fd6cb19546 [NO ISSUE] Clean up RuntimeSegmentUtilities (#6438)
fd6cb19546 is described below

commit fd6cb195464af9ee33a5eee06fce6cd67d4fdc86
Author: Paolo Bizzarri <[email protected]>
AuthorDate: Mon Sep 1 08:34:53 2025 +0200

    [NO ISSUE] Clean up RuntimeSegmentUtilities (#6438)
    
    * Cleanup of segment memories
    
    * Fixed order of parameters
---
 .../main/java/org/drools/core/common/Memory.java   |   2 +-
 .../org/drools/core/phreak/EagerPhreakBuilder.java |   6 +-
 .../org/drools/core/phreak/LazyPhreakBuilder.java  | 162 ++++++++++-----------
 .../org/drools/core/phreak/PropagationEntry.java   |   2 +-
 .../drools/core/phreak/RuleNetworkEvaluator.java   |   4 +-
 .../core/phreak/RuntimeSegmentUtilities.java       |  32 ++--
 .../org/drools/core/phreak/SegmentPropagator.java  |   2 +-
 .../drools/core/reteoo/LeftInputAdapterNode.java   |  12 +-
 .../kiesession/NodeSegmentUnlinkingTest.java       |   6 +-
 .../org/drools/kiesession/RuleUnlinkingTest.java   |   4 +-
 .../RuleUnlinkingWithSegmentMemoryTest.java        |   8 +-
 .../drools/mvel/integrationtests/LinkingTest.java  |   6 +-
 12 files changed, 123 insertions(+), 123 deletions(-)

diff --git a/drools-core/src/main/java/org/drools/core/common/Memory.java 
b/drools-core/src/main/java/org/drools/core/common/Memory.java
index 5fc3465a01..6bdbcddbff 100644
--- a/drools-core/src/main/java/org/drools/core/common/Memory.java
+++ b/drools-core/src/main/java/org/drools/core/common/Memory.java
@@ -35,7 +35,7 @@ public interface Memory extends DoubleLinkedEntry<Memory> {
     default SegmentMemory getOrCreateSegmentMemory( LeftTupleSource 
tupleSource, ReteEvaluator reteEvaluator ) {
         SegmentMemory smem = getSegmentMemory();
         if (smem == null) {
-            smem = RuntimeSegmentUtilities.getOrCreateSegmentMemory(this, 
tupleSource, reteEvaluator);
+            smem = 
RuntimeSegmentUtilities.getOrCreateSegmentMemory(reteEvaluator, tupleSource, 
this);
         }
         return smem;
     }
diff --git 
a/drools-core/src/main/java/org/drools/core/phreak/EagerPhreakBuilder.java 
b/drools-core/src/main/java/org/drools/core/phreak/EagerPhreakBuilder.java
index ae6ca70dd6..3f6feddaac 100644
--- a/drools-core/src/main/java/org/drools/core/phreak/EagerPhreakBuilder.java
+++ b/drools-core/src/main/java/org/drools/core/phreak/EagerPhreakBuilder.java
@@ -147,7 +147,7 @@ public class EagerPhreakBuilder implements PhreakBuilder {
             PathMemory pmem = (PathMemory) 
wm.getNodeMemories().peekNodeMemory(tn);
             if (pmem != null) {
                 List<LeftTupleNode> splits = exclBranchRoots.stream().map( 
pair -> pair.parent).filter(Objects::nonNull).collect(Collectors.toList());
-                LazyPhreakBuilder.flushStagedTuples(tn, pmem, splits, wm);
+                LazyPhreakBuilder.flushStagedTuples(wm, tn, pmem, splits);
             }
         }
 
@@ -849,12 +849,12 @@ public class EagerPhreakBuilder implements PhreakBuilder {
 
             if ( sm1 == null) {
                 // To be able to merge sm1 must exist
-                sm1 = 
RuntimeSegmentUtilities.getOrCreateSegmentMemory(proto1.getRootNode(), wm);
+                sm1 = RuntimeSegmentUtilities.getOrCreateSegmentMemory(wm, 
proto1.getRootNode());
             }
 
             if ( sm2 == null) {
                 // To be able to merge sm2 must exist
-                sm2 = 
RuntimeSegmentUtilities.getOrCreateSegmentMemory(proto2.getRootNode(), wm);
+                sm2 = RuntimeSegmentUtilities.getOrCreateSegmentMemory(wm, 
proto2.getRootNode());
             }
 
             // merge the memories and reassign back to sm1
diff --git 
a/drools-core/src/main/java/org/drools/core/phreak/LazyPhreakBuilder.java 
b/drools-core/src/main/java/org/drools/core/phreak/LazyPhreakBuilder.java
index a910979812..0fa56f7dc8 100644
--- a/drools-core/src/main/java/org/drools/core/phreak/LazyPhreakBuilder.java
+++ b/drools-core/src/main/java/org/drools/core/phreak/LazyPhreakBuilder.java
@@ -135,7 +135,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
 
             if (NodeTypeEnums.isLeftInputAdapterNode(firstSplit) && 
firstSplit.getAssociatedTerminalsSize() == 1) {
                 // rule added with no sharing
-                insertLiaFacts(firstSplit, wm);
+                insertLiaFacts(wm, firstSplit);
             } else {
                 PathEndNodeMemories tnms = getPathEndMemories(wm, 
pathEndNodes);
 
@@ -147,13 +147,13 @@ class LazyPhreakBuilder implements PhreakBuilder {
                 Map<PathMemory, SegmentMemory[]> prevSmemsLookup = 
reInitPathMemories(tnms.otherPmems, null);
 
                 // must collect all visited SegmentMemories, for link 
notification
-                Set<SegmentMemory> smemsToNotify = handleExistingPaths(tn, 
prevSmemsLookup, tnms.otherPmems, wm, ExistingPathStrategy.ADD_STRATEGY);
+                Set<SegmentMemory> smemsToNotify = handleExistingPaths(wm, tn, 
prevSmemsLookup, tnms.otherPmems, ExistingPathStrategy.ADD_STRATEGY);
 
                 addNewPaths(wm, smemsToNotify, tnms.subjectPmems);
 
-                processLeftTuples(firstSplit, wm, true, rule);
+                processLeftTuples(wm, rule, firstSplit, true);
 
-                notifySegments(smemsToNotify, wm);
+                notifySegments(wm, smemsToNotify);
             }
         }
 
@@ -195,25 +195,25 @@ class LazyPhreakBuilder implements PhreakBuilder {
             if ( !tnms.subjectPmems.isEmpty() ) {
                 if (NodeTypeEnums.isLeftInputAdapterNode(firstSplit) && 
firstSplit.getAssociatedTerminalsSize() == 1) {
                     if (tnms.subjectPmem != null) {
-                        flushStagedTuples(firstSplit, tnms.subjectPmem, wm);
+                        flushStagedTuples(wm, firstSplit, tnms.subjectPmem);
                     }
 
-                    processLeftTuples(firstSplit, wm, false, tn.getRule());
+                    processLeftTuples(wm, tn.getRule(), firstSplit, false);
 
                     removeNewPaths(wm, tnms.subjectPmems);
                 } else {
-                    flushStagedTuples(tn, tnms.subjectPmem, 
pathEndNodes.subjectSplits, wm);
+                    flushStagedTuples(wm, tn, tnms.subjectPmem, 
pathEndNodes.subjectSplits);
 
-                    processLeftTuples(firstSplit, wm, false, tn.getRule());
+                    processLeftTuples(wm, tn.getRule(), firstSplit, false);
 
                     removeNewPaths(wm, tnms.subjectPmems);
 
                     Map<PathMemory, SegmentMemory[]> prevSmemsLookup = 
reInitPathMemories(tnms.otherPmems, tn);
 
                     // must collect all visited SegmentMemories, for link 
notification
-                    Set<SegmentMemory> smemsToNotify = handleExistingPaths(tn, 
prevSmemsLookup, tnms.otherPmems, wm, ExistingPathStrategy.REMOVE_STRATEGY);
+                    Set<SegmentMemory> smemsToNotify = handleExistingPaths(wm, 
tn, prevSmemsLookup, tnms.otherPmems, ExistingPathStrategy.REMOVE_STRATEGY);
 
-                    notifySegments(smemsToNotify, wm);
+                    notifySegments(wm, smemsToNotify);
                 }
             }
 
@@ -275,7 +275,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
                 SegmentMemory sm2 = nodeToSegmentMap.get(node);
                 if (sm2 == null) {
                     SegmentMemory sm1 = smems[smemIndex - 1];
-                    correctMemoryOnSplitsChanged(parentNode, null, wm);
+                    correctMemoryOnSplitsChanged(wm, parentNode, null);
                     sm2 = splitSegment(wm, sm1, parentNode);
                     nodeToSegmentMap.put(node, sm2);
                     smemsToNotify.add(sm1);
@@ -336,7 +336,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
                 return;
             }
 
-            correctMemoryOnSplitsChanged(parentNode, tn, wm);
+            correctMemoryOnSplitsChanged(wm, parentNode, tn);
 
             SegmentMemory sm1 = smems[smemIndex];
             SegmentMemory sm2 = prevSmems[prevSmemIndex];
@@ -399,8 +399,8 @@ class LazyPhreakBuilder implements PhreakBuilder {
         }
     }
 
-    private static Set<SegmentMemory> handleExistingPaths(TerminalNode tn, 
Map<PathMemory, SegmentMemory[]> prevSmemsLookup,
-                                                          List<PathMemory> 
pmems, InternalWorkingMemory wm, ExistingPathStrategy strategy) {
+    private static Set<SegmentMemory> 
handleExistingPaths(InternalWorkingMemory wm, TerminalNode tn,
+                                                          Map<PathMemory, 
SegmentMemory[]> prevSmemsLookup, List<PathMemory> pmems, ExistingPathStrategy 
strategy) {
         Set<SegmentMemory>                smemsToNotify    = new HashSet<>();
         Set<SegmentMemory>                visitedSegments  = new HashSet<>();
         Set<LeftTupleNode> visitedNodes = new HashSet<>();
@@ -443,7 +443,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
                                 smemsToNotify, nodeToSegmentMap, wm);
                         smemSplitAdjustAmount++;
                     }
-                    checkEagerSegmentCreation(parentNode, wm, 
nodeTypesInSegment );
+                    checkEagerSegmentCreation(wm, parentNode, 
nodeTypesInSegment );
                     nodeTypesInSegment = 0;
                 }
             } while (!NodeTypeEnums.isEndNode(node));
@@ -481,7 +481,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
                                     smemsToNotify.add( childSmem );
                                 }
                             }
-                            correctMemoryOnSplitsChanged( parent, null, wm );
+                            correctMemoryOnSplitsChanged( wm, parent, null );
                         }
                     } else {
                         Memory mem = wm.getNodeMemories().peekNodeMemory( 
child );
@@ -523,7 +523,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
             while (true) {
                 if (child.getAssociatedTerminalsSize() == 1 && 
NodeTypeEnums.isBetaNode(child)) {
                     // If this is a beta node, it'll delete all the right 
input data
-                    deleteRightInputData((LeftTupleSink) child, wm);
+                    deleteRightInputData(wm, (LeftTupleSink) child);
                 }
 
                 if (parent != null && parent.getAssociatedTerminalsSize() != 1 
&& child.getAssociatedTerminalsSize() == 1) {
@@ -581,7 +581,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
         }
     }
 
-    public static void flushStagedTuples(TerminalNode tn, PathMemory pmem, 
List<LeftTupleNode> splits, InternalWorkingMemory wm) {
+    public static void flushStagedTuples(InternalWorkingMemory wm, 
TerminalNode tn, PathMemory pmem, List<LeftTupleNode> splits) {
         // first flush the subject rule, then flush any staging lists that are 
part of a merge
         if ( pmem.isInitialized() ) {
             RuleNetworkEvaluator.INSTANCE.evaluateNetwork(pmem, 
pmem.getRuleAgendaItem().getRuleExecutor(), wm);
@@ -623,7 +623,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
         }
     }
 
-    private static void flushStagedTuples(LeftTupleNode splitStartNode, 
PathMemory pmem, InternalWorkingMemory wm) {
+    private static void flushStagedTuples(InternalWorkingMemory wm, 
LeftTupleNode splitStartNode, PathMemory pmem) {
         if ( !pmem.isInitialized() ) {
             // The rule has never been linked in and evaluated, so there will 
be nothing to flush.
             return;
@@ -666,13 +666,13 @@ class LazyPhreakBuilder implements PhreakBuilder {
         return previousSmems;
     }
 
-    private static void notifySegments(Set<SegmentMemory> smems, 
InternalWorkingMemory wm) {
+    private static void notifySegments(InternalWorkingMemory wm, 
Set<SegmentMemory> smems) {
         for (SegmentMemory sm : smems) {
             sm.notifyRuleLinkSegment(wm);
         }
     }
 
-    private static void correctMemoryOnSplitsChanged(LeftTupleNode splitStart, 
TerminalNode removingTN, InternalWorkingMemory wm) {
+    private static void correctMemoryOnSplitsChanged(InternalWorkingMemory wm, 
LeftTupleNode splitStart, TerminalNode removingTN) {
         if (splitStart.getType() == NodeTypeEnums.QueryElementNode) {
             QueryElementNode.QueryElementNodeMemory mem = 
(QueryElementNode.QueryElementNodeMemory) 
wm.getNodeMemories().peekNodeMemory(splitStart);
             if (mem != null) {
@@ -707,7 +707,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
         return counter;
     }
 
-    private static void insertLiaFacts(LeftTupleNode startNode, 
InternalWorkingMemory wm) {
+    private static void insertLiaFacts(InternalWorkingMemory wm, LeftTupleNode 
startNode) {
         // rule added with no sharing
         PropagationContextFactory pctxFactory = 
RuntimeComponentFactory.get().getPropagationContextFactory();
         final PropagationContext  pctx        = 
pctxFactory.createPropagationContext(wm.getNextPropagationIdCounter(), 
PropagationContext.Type.RULE_ADDITION, null, null, null);
@@ -738,7 +738,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
         }
     }
 
-    private static void deleteRightInputData(LeftTupleSink node, 
InternalWorkingMemory wm) {
+    private static void deleteRightInputData(InternalWorkingMemory wm, 
LeftTupleSink node) {
         if (wm.getNodeMemories().peekNodeMemory(node) != null) {
             BetaNode       bn = (BetaNode) node;
             BetaMemory bm;
@@ -766,11 +766,11 @@ class LazyPhreakBuilder implements PhreakBuilder {
             unlinkRightTuples(srcRightTuples.getUpdateFirst());
             unlinkRightTuples(srcRightTuples.getDeleteFirst());
 
-            deleteFactsFromRightInput(bn, wm);
+            deleteFactsFromRightInput(wm, bn);
         }
     }
 
-    private static void deleteFactsFromRightInput(BetaNode bn, 
InternalWorkingMemory wm) {
+    private static void deleteFactsFromRightInput(InternalWorkingMemory wm, 
BetaNode bn) {
         ObjectSource source = bn.getRightInput();
         if (source.getType() == NodeTypeEnums.WindowNode) {
             WindowNode.WindowMemory memory = wm.getNodeMemory(((WindowNode) 
source));
@@ -800,7 +800,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
      * It traverses to the LiaNode's ObjectTypeNode. It then iterates the 
LeftTuple chains, where an existing LeftTuple is staged
      * as delete. Or a new LeftTuple is created and staged as an insert.
      */
-    private static void processLeftTuples(LeftTupleNode node, 
InternalWorkingMemory wm, boolean insert, Rule rule) {
+    private static void processLeftTuples(InternalWorkingMemory wm, Rule rule, 
LeftTupleNode node, boolean insert) {
         // *** if you make a fix here, it most likely needs to be in 
PhreakActivationIteratorToo ***
 
         // Must iterate up until a node with memory is found, this can be 
followed to find the LeftTuples
@@ -829,7 +829,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
                     Tuple        lt = 
BetaNode.getFirstTuple(bm.getLeftTupleMemory(), it);
                     for (; lt != null; lt = (TupleImpl) it.next(lt)) {
                         AccumulateContext accctx = (AccumulateContext) 
lt.getContextObject();
-                        visitChild( (TupleImpl) accctx.getResultLeftTuple(), 
insert, wm, rule);
+                        visitChild( wm, rule, (TupleImpl) 
accctx.getResultLeftTuple(), insert);
                     }
                 } else if (NodeTypeEnums.ExistsNode == node.getType() && 
!node.isRightInputIsRiaNode()) { // do not process exists with subnetworks
                     // If there is a subnetwork, then there is no populated 
RTM, but the LTM is populated,
@@ -839,14 +839,14 @@ class LazyPhreakBuilder implements PhreakBuilder {
                     FastIterator it = 
bm.getRightTupleMemory().fullFastIterator(); // done off the RightTupleMemory, 
as exists only have unblocked tuples on the left side
                     for (RightTuple rt = (RightTuple) 
BetaNode.getFirstTuple(bm.getRightTupleMemory(), it); rt != null; rt = 
(RightTuple) it.next(rt)) {
                         for (LeftTuple lt = rt.getBlocked(); lt != null; lt = 
lt.getBlockedNext()) {
-                            visitLeftTuple(wm, insert, rule, lt);
+                            visitLeftTuple(wm, rule, lt, insert);
                         }
                     }
                 } else {
                     bm = (BetaMemory) wm.getNodeMemory((MemoryFactory) node);
                     FastIterator it = 
bm.getLeftTupleMemory().fullFastIterator();
                     for (TupleImpl lt = 
(TupleImpl)BetaNode.getFirstTuple(bm.getLeftTupleMemory(), it); lt != null; lt 
= (TupleImpl) it.next(lt)) {
-                        visitLeftTuple(wm, insert, rule, lt);
+                        visitLeftTuple(wm, rule, lt, insert);
                     }
                 }
                 return;
@@ -855,7 +855,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
                 TupleMemory  ltm = fm.getBetaMemory().getLeftTupleMemory();
                 FastIterator it  = ltm.fullFastIterator();
                 for (TupleImpl lt = ltm.getFirst(null); lt != null; lt = 
(TupleImpl) it.next(lt)) {
-                    visitChild(lt, insert, wm, rule);
+                    visitChild(wm, rule, lt, insert);
                 }
                 return;
             }
@@ -885,7 +885,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
 
                 // Each lt is for a different lian, skip any lian not 
associated with the rule. Need to use lt parent (souce) not child to check the 
lian.
                 if 
(SuperCacheFixer.getLeftTupleSource(lt).isAssociatedWith(rule)) {
-                    visitChild(lt, insert, wm, rule);
+                    visitChild(wm, rule, lt, insert);
 
                     if (lt.getHandlePrevious() != null && nextLt != null) {
                         lt.getHandlePrevious().setHandleNext( nextLt );
@@ -896,16 +896,16 @@ class LazyPhreakBuilder implements PhreakBuilder {
         }
     }
 
-    private static void visitLeftTuple(InternalWorkingMemory wm, boolean 
insert, Rule rule, TupleImpl lt) {
+    private static void visitLeftTuple(InternalWorkingMemory wm, Rule rule, 
TupleImpl lt, boolean insert) {
         TupleImpl childLt = lt.getFirstChild();
         while (childLt != null) {
             TupleImpl nextLt = childLt.getHandleNext();
-            visitChild(childLt, insert, wm, rule);
+            visitChild(wm, rule, childLt, insert);
             childLt = nextLt;
         }
     }
 
-    private static void visitChild(TupleImpl lt, boolean insert, 
InternalWorkingMemory wm, Rule rule) {
+    private static void visitChild(InternalWorkingMemory wm, Rule rule, 
TupleImpl lt, boolean insert) {
         TupleImpl prevLt = null;
         LeftTupleSinkNode sink = (LeftTupleSinkNode) lt.getSink();
 
@@ -917,18 +917,18 @@ class LazyPhreakBuilder implements PhreakBuilder {
                     if (lt.getSink().getAssociatedTerminalsSize() > 1) {
                         if (lt.getFirstChild() != null) {
                             for ( TupleImpl child = lt.getFirstChild(); child 
!= null; child =  child.getHandleNext() ) {
-                                visitChild(child, insert, wm, rule);
+                                visitChild(wm, rule, child, insert);
                             }
                         } else if (lt.getSink().getType() == 
NodeTypeEnums.RightInputAdapterNode) {
-                            insertPeerRightTuple(lt, wm, rule, insert);
+                            insertPeerRightTuple(wm, rule, lt, insert);
                         }
                     } else if (!insert) {
-                        iterateLeftTuple( lt, wm );
+                        iterateLeftTuple( wm, lt );
                         TupleImpl lt2 = null;
                         for ( TupleImpl peerLt = lt.getPeer();
                               peerLt != null && 
peerLt.getSink().isAssociatedWith(rule) && 
peerLt.getSink().getAssociatedTerminalsSize() == 1;
                               peerLt = peerLt.getPeer() ) {
-                            iterateLeftTuple( peerLt, wm );
+                            iterateLeftTuple( wm, peerLt );
                             lt2 = peerLt;
                         }
 
@@ -942,12 +942,12 @@ class LazyPhreakBuilder implements PhreakBuilder {
                 lt = lt.getPeer();
             } else {
                 // there is a sink without a peer LT, so create the peer LT
-                prevLt = insertPeerLeftTuple(prevLt, sink, wm, insert);
+                prevLt = insertPeerLeftTuple(wm, sink, prevLt, insert);
             }
         }
     }
 
-    private static void insertPeerRightTuple( TupleImpl lt, 
InternalWorkingMemory wm, Rule rule, boolean insert ) {
+    private static void insertPeerRightTuple( InternalWorkingMemory wm, Rule 
rule, TupleImpl lt, boolean insert ) {
         // There's a shared RightInputAdaterNode, so check if one of its sinks 
is associated only to the new rule
         TupleImpl prevLt = null;
         RightInputAdapterNode rian = (RightInputAdapterNode) lt.getSink();
@@ -971,7 +971,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
     /**
      * Create all missing peers
      */
-    private static TupleImpl insertPeerLeftTuple(TupleImpl lt, 
LeftTupleSinkNode node, InternalWorkingMemory wm, boolean insert) {
+    private static TupleImpl insertPeerLeftTuple(InternalWorkingMemory wm, 
LeftTupleSinkNode node, TupleImpl lt, boolean insert) {
         TupleImpl peer = TupleFactory.createPeer(node, lt);
 
         if ( node.getLeftTupleSource().getType() == 
NodeTypeEnums.AlphaTerminalNode ) {
@@ -1004,7 +1004,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
         return peer;
     }
 
-    private static void iterateLeftTuple(TupleImpl lt, InternalWorkingMemory 
wm) {
+    private static void iterateLeftTuple(InternalWorkingMemory wm, TupleImpl 
lt) {
         if (NodeTypeEnums.isTerminalNode(lt.getSink())) {
             PathMemory pmem = (PathMemory) 
wm.getNodeMemories().peekNodeMemory( lt.getSink());
             if (pmem != null) {
@@ -1014,14 +1014,14 @@ class LazyPhreakBuilder implements PhreakBuilder {
             if (lt.getContextObject() instanceof AccumulateContext) {
                 TupleImpl resultLt = (TupleImpl) (( AccumulateContext ) 
lt.getContextObject()).getResultLeftTuple();
                 if (resultLt != null) {
-                    iterateLeftTuple( resultLt, wm );
+                    iterateLeftTuple( wm, resultLt );
                 }
             }
             for (TupleImpl child = lt.getFirstChild(); child != null; child = 
child.getHandleNext()) {
                 for (TupleImpl peer = child; peer != null; peer = 
peer.getPeer()) {
                     if (peer.getPeer() == null) {
                         // it's unnnecessary to visit the unshared networks, 
so only iterate the last peer
-                        iterateLeftTuple( peer, wm );
+                        iterateLeftTuple( wm, peer );
                     }
                 }
             }
@@ -1346,7 +1346,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
                 // RTNS and RiaNode's have their own segment, if they are the 
child of a split.
                 createChildSegmentForTerminalNode( node, memory );
             } else {
-                createSegmentMemory((LeftTupleSource) node, reteEvaluator);
+                createSegmentMemory(reteEvaluator, (LeftTupleSource) node);
             }
         }
         return memory.getSegmentMemory();
@@ -1357,7 +1357,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
             Memory memory = reteEvaluator.getNodeMemory((MemoryFactory) 
segmentRoot);
             return createChildSegmentForTerminalNode(segmentRoot, memory );
         }
-        return createSegmentMemory((LeftTupleSource) segmentRoot, 
reteEvaluator);
+        return createSegmentMemory(reteEvaluator, (LeftTupleSource) 
segmentRoot);
     }
 
     private static SegmentMemory createChildSegmentForTerminalNode( 
LeftTupleNode node, Memory memory ) {
@@ -1373,7 +1373,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
         return childSmem;
     }
 
-    private static SegmentMemory createSegmentMemory(LeftTupleSource 
segmentRoot, ReteEvaluator reteEvaluator) {
+    private static SegmentMemory createSegmentMemory(ReteEvaluator 
reteEvaluator, LeftTupleSource segmentRoot) {
         LeftTupleSource tupleSource = segmentRoot;
         SegmentMemory smem = new SegmentMemory(segmentRoot);
 
@@ -1388,36 +1388,36 @@ class LazyPhreakBuilder implements PhreakBuilder {
         while (true) {
             nodeTypesInSegment = updateNodeTypesMask(tupleSource, 
nodeTypesInSegment);
             if (NodeTypeEnums.isBetaNode(tupleSource)) {
-                allLinkedTestMask = processBetaNode((BetaNode)tupleSource, 
reteEvaluator, smem, memories, nodePosMask, allLinkedTestMask, updateNodeBit);
+                allLinkedTestMask = processBetaNode(reteEvaluator, 
(BetaNode)tupleSource, smem, memories, nodePosMask, allLinkedTestMask, 
updateNodeBit);
             } else {
                 switch (tupleSource.getType()) {
                     case NodeTypeEnums.LeftInputAdapterNode:
                     case NodeTypeEnums.AlphaTerminalNode:
-                        allLinkedTestMask = 
processLiaNode((LeftInputAdapterNode) tupleSource, reteEvaluator, smem, 
memories, nodePosMask, allLinkedTestMask);
+                        allLinkedTestMask = processLiaNode(reteEvaluator, 
(LeftInputAdapterNode) tupleSource, smem, memories, nodePosMask, 
allLinkedTestMask);
                         break;
                     case NodeTypeEnums.EvalConditionNode:
-                        processEvalNode((EvalConditionNode) tupleSource, 
reteEvaluator, smem, memories);
+                        processEvalNode(reteEvaluator, (EvalConditionNode) 
tupleSource, smem, memories);
                         break;
                     case NodeTypeEnums.ConditionalBranchNode:
-                        updateNodeBit = 
processBranchNode((ConditionalBranchNode) tupleSource, reteEvaluator, smem, 
memories);
+                        updateNodeBit = processBranchNode(reteEvaluator, 
(ConditionalBranchNode) tupleSource, smem, memories);
                         break;
                     case NodeTypeEnums.FromNode:
-                        processFromNode((FromNode) tupleSource, reteEvaluator, 
smem, memories);
+                        processFromNode(reteEvaluator, (FromNode) tupleSource, 
smem, memories);
                         break;
                     case NodeTypeEnums.ReactiveFromNode:
-                        processReactiveFromNode((MemoryFactory) tupleSource, 
reteEvaluator, smem, memories, nodePosMask);
+                        processReactiveFromNode(reteEvaluator, (MemoryFactory) 
tupleSource, smem, memories, nodePosMask);
                         break;
                     case NodeTypeEnums.TimerConditionNode:
-                        processTimerNode((TimerNode) tupleSource, 
reteEvaluator, smem, memories, nodePosMask);
+                        processTimerNode(reteEvaluator, (TimerNode) 
tupleSource, smem, memories, nodePosMask);
                         break;
                     case NodeTypeEnums.AsyncSendNode:
-                        processAsyncSendNode((AsyncSendNode) tupleSource, 
reteEvaluator, smem, memories);
+                        processAsyncSendNode(reteEvaluator, (AsyncSendNode) 
tupleSource, smem, memories);
                         break;
                     case NodeTypeEnums.AsyncReceiveNode:
-                        processAsyncReceiveNode((AsyncReceiveNode) 
tupleSource, reteEvaluator, smem, memories, nodePosMask);
+                        processAsyncReceiveNode(reteEvaluator, 
(AsyncReceiveNode) tupleSource, smem, memories, nodePosMask);
                         break;
                     case NodeTypeEnums.QueryElementNode:
-                        updateNodeBit = processQueryNode((QueryElementNode) 
tupleSource, reteEvaluator, segmentRoot, smem, memories, nodePosMask);
+                        updateNodeBit = processQueryNode(reteEvaluator, 
(QueryElementNode) tupleSource, segmentRoot, smem, memories, nodePosMask);
                         break;
                 }
             }
@@ -1441,7 +1441,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
                         ObjectSink[] nodes = 
rian.getObjectSinkPropagator().getSinks();
                         for ( ObjectSink node : nodes ) {
                             if ( NodeTypeEnums.isLeftTupleSource(node) )  {
-                                getOrCreateSegmentMemory( (LeftTupleSource) 
node, reteEvaluator );
+                                getOrCreateSegmentMemory( reteEvaluator, 
(LeftTupleSource) node );
                             }
                         }
                     } else if (NodeTypeEnums.isTerminalNode(sink)) {
@@ -1486,14 +1486,14 @@ class LazyPhreakBuilder implements PhreakBuilder {
         smem.setSegmentPosMaskBit(ruleSegmentPosMask);
         smem.setPos(counter);
 
-        updateRiaAndTerminalMemory(tupleSource, tupleSource, smem, 
reteEvaluator, false, nodeTypesInSegment);
+        updateRiaAndTerminalMemory(reteEvaluator, tupleSource, tupleSource, 
smem, false, nodeTypesInSegment);
 
         reteEvaluator.getKnowledgeBase().registerSegmentPrototype(segmentRoot, 
smem.getSegmentPrototype().initFromSegmentMemory(smem));
 
         return smem;
     }
 
-    private static boolean processQueryNode(QueryElementNode queryNode, 
ReteEvaluator reteEvaluator, LeftTupleSource segmentRoot, SegmentMemory smem, 
List<Memory> memories, long nodePosMask) {
+    private static boolean processQueryNode(ReteEvaluator reteEvaluator, 
QueryElementNode queryNode, LeftTupleSource segmentRoot, SegmentMemory smem, 
List<Memory> memories, long nodePosMask) {
         // Initialize the QueryElementNode and have it's memory reference the 
actual query SegmentMemory
         SegmentMemory querySmem = getQuerySegmentMemory(reteEvaluator, 
queryNode);
         QueryElementNode.QueryElementNodeMemory queryNodeMem = 
smem.createNodeMemory(queryNode, reteEvaluator);
@@ -1504,33 +1504,33 @@ class LazyPhreakBuilder implements PhreakBuilder {
         return ! queryNode.getQueryElement().isAbductive();
     }
 
-    private static void processFromNode(MemoryFactory tupleSource, 
ReteEvaluator reteEvaluator, SegmentMemory smem, List<Memory> memories) {
+    private static void processFromNode(ReteEvaluator reteEvaluator, 
MemoryFactory tupleSource, SegmentMemory smem, List<Memory> memories) {
         Memory mem = smem.createNodeMemory(tupleSource, reteEvaluator);
         memories.add(mem);
         mem.setSegmentMemory(smem);
     }
 
-    private static void processAsyncSendNode(MemoryFactory tupleSource, 
ReteEvaluator reteEvaluator, SegmentMemory smem, List<Memory> memories) {
+    private static void processAsyncSendNode(ReteEvaluator reteEvaluator, 
MemoryFactory tupleSource, SegmentMemory smem, List<Memory> memories) {
         Memory mem = smem.createNodeMemory(tupleSource, reteEvaluator);
         mem.setSegmentMemory(smem);
         memories.add(mem);
     }
 
-    private static void processAsyncReceiveNode(AsyncReceiveNode tupleSource, 
ReteEvaluator reteEvaluator, SegmentMemory smem, List<Memory> memories, long 
nodePosMask) {
+    private static void processAsyncReceiveNode(ReteEvaluator reteEvaluator, 
AsyncReceiveNode tupleSource, SegmentMemory smem, List<Memory> memories, long 
nodePosMask) {
         AsyncReceiveNode.AsyncReceiveMemory tnMem = smem.createNodeMemory( 
tupleSource, reteEvaluator );
         memories.add(tnMem);
         tnMem.setNodePosMaskBit(nodePosMask);
         tnMem.setSegmentMemory(smem);
     }
 
-    private static void processReactiveFromNode(MemoryFactory tupleSource, 
ReteEvaluator reteEvaluator, SegmentMemory smem, List<Memory> memories, long 
nodePosMask) {
+    private static void processReactiveFromNode(ReteEvaluator reteEvaluator, 
MemoryFactory tupleSource, SegmentMemory smem, List<Memory> memories, long 
nodePosMask) {
         FromNode.FromMemory mem = ((FromNode.FromMemory) 
smem.createNodeMemory(tupleSource, reteEvaluator));
         memories.add(mem);
         mem.setSegmentMemory(smem);
         mem.setNodePosMaskBit(nodePosMask);
     }
 
-    private static boolean processBranchNode(ConditionalBranchNode 
tupleSource, ReteEvaluator reteEvaluator, SegmentMemory smem, List<Memory> 
memories) {
+    private static boolean processBranchNode(ReteEvaluator reteEvaluator, 
ConditionalBranchNode tupleSource, SegmentMemory smem, List<Memory> memories) {
         ConditionalBranchNode.ConditionalBranchMemory branchMem = 
smem.createNodeMemory(tupleSource, reteEvaluator);
         memories.add(branchMem);
         branchMem.setSegmentMemory(smem);
@@ -1538,20 +1538,20 @@ class LazyPhreakBuilder implements PhreakBuilder {
         return false;
     }
 
-    private static void processEvalNode(EvalConditionNode tupleSource, 
ReteEvaluator reteEvaluator, SegmentMemory smem, List<Memory> memories) {
+    private static void processEvalNode(ReteEvaluator reteEvaluator, 
EvalConditionNode tupleSource, SegmentMemory smem, List<Memory> memories) {
         EvalConditionNode.EvalMemory evalMem = 
smem.createNodeMemory(tupleSource, reteEvaluator);
         memories.add(evalMem);
         evalMem.setSegmentMemory(smem);
     }
 
-    private static void processTimerNode(TimerNode tupleSource, ReteEvaluator 
reteEvaluator, SegmentMemory smem, List<Memory> memories, long nodePosMask) {
+    private static void processTimerNode(ReteEvaluator reteEvaluator, 
TimerNode tupleSource, SegmentMemory smem, List<Memory> memories, long 
nodePosMask) {
         TimerNode.TimerNodeMemory tnMem = smem.createNodeMemory( tupleSource, 
reteEvaluator );
         memories.add(tnMem);
         tnMem.setNodePosMaskBit(nodePosMask);
         tnMem.setSegmentMemory(smem);
     }
 
-    private static long processLiaNode(LeftInputAdapterNode tupleSource, 
ReteEvaluator reteEvaluator, SegmentMemory smem, List<Memory> memories, long 
nodePosMask, long allLinkedTestMask) {
+    private static long processLiaNode(ReteEvaluator reteEvaluator, 
LeftInputAdapterNode tupleSource, SegmentMemory smem, List<Memory> memories, 
long nodePosMask, long allLinkedTestMask) {
         LeftInputAdapterNode.LiaNodeMemory liaMemory = 
smem.createNodeMemory(tupleSource, reteEvaluator);
         memories.add(liaMemory);
         liaMemory.setSegmentMemory(smem);
@@ -1560,7 +1560,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
         return allLinkedTestMask;
     }
 
-    private static long processBetaNode(BetaNode betaNode, ReteEvaluator 
reteEvaluator, SegmentMemory smem, List<Memory> memories, long nodePosMask, 
long allLinkedTestMask, boolean updateNodeBit) {
+    private static long processBetaNode(ReteEvaluator reteEvaluator, BetaNode 
betaNode, SegmentMemory smem, List<Memory> memories, long nodePosMask, long 
allLinkedTestMask, boolean updateNodeBit) {
         BetaMemory bm;
         if (NodeTypeEnums.AccumulateNode == betaNode.getType()) {
             AccumulateNode.AccumulateMemory accMemory = 
((AccumulateNode.AccumulateMemory) smem.createNodeMemory(betaNode, 
reteEvaluator));
@@ -1580,7 +1580,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
         bm.setSegmentMemory(smem);
 
         if (betaNode.isRightInputIsRiaNode()) {
-            RightInputAdapterNode riaNode = createRiaSegmentMemory( betaNode, 
reteEvaluator );
+            RightInputAdapterNode riaNode = createRiaSegmentMemory( 
reteEvaluator, betaNode );
 
             PathMemory riaMem = reteEvaluator.getNodeMemory(riaNode);
             bm.setRiaRuleMemory((RiaPathMemory) riaMem);
@@ -1608,19 +1608,19 @@ class LazyPhreakBuilder implements PhreakBuilder {
      * This is because the rianode only cares if all of it's segments are 
linked, then
      * it sets the bit of node it is the right input for.
      */
-    private static int updateRiaAndTerminalMemory( LeftTupleSource lt,
+    private static int updateRiaAndTerminalMemory( ReteEvaluator reteEvaluator,
+                                                   LeftTupleSource lt,
                                                    LeftTupleSource originalLt,
                                                    SegmentMemory smem,
-                                                   ReteEvaluator reteEvaluator,
                                                    boolean fromPrototype,
                                                    int nodeTypesInSegment ) {
 
-        nodeTypesInSegment = checkSegmentBoundary(lt, reteEvaluator, 
nodeTypesInSegment);
+        nodeTypesInSegment = checkSegmentBoundary(reteEvaluator, lt, 
nodeTypesInSegment);
 
         PathMemory pmem = null;
         for (LeftTupleSink sink : lt.getSinkPropagator().getSinks()) {
             if (NodeTypeEnums.isLeftTupleSource(sink)) {
-                nodeTypesInSegment = 
updateRiaAndTerminalMemory((LeftTupleSource) sink, originalLt, smem, 
reteEvaluator, fromPrototype, nodeTypesInSegment);
+                nodeTypesInSegment = updateRiaAndTerminalMemory(reteEvaluator, 
(LeftTupleSource) sink, originalLt, smem, fromPrototype, nodeTypesInSegment);
             } else if (sink.getType() == NodeTypeEnums.RightInputAdapterNode) {
                 // Even though we don't add the pmem and smem together, all 
pmem's for all pathend nodes must be initialized
                 RightInputAdapterNode.RiaPathMemory riaMem = 
(RightInputAdapterNode.RiaPathMemory) 
reteEvaluator.getNodeMemory((MemoryFactory) sink);
@@ -1641,7 +1641,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
                         ObjectSink[] nodes = ((RightInputAdapterNode) 
sink).getObjectSinkPropagator().getSinks();
                         for ( ObjectSink node : nodes ) {
                             if ( NodeTypeEnums.isLeftTupleSource(node) )  {
-                                getOrCreateSegmentMemory( (LeftTupleSource) 
node, reteEvaluator );
+                                getOrCreateSegmentMemory( reteEvaluator, 
(LeftTupleSource) node );
                             }
                         }
                     }
@@ -1657,7 +1657,7 @@ class LazyPhreakBuilder implements PhreakBuilder {
                     // not's can cause segments to be linked, and the rules 
need to be notified for evaluation
                     smem.notifyRuleLinkSegment(reteEvaluator);
                 }
-                checkEagerSegmentCreation(sink.getLeftTupleSource(), 
reteEvaluator, nodeTypesInSegment);
+                checkEagerSegmentCreation(reteEvaluator, 
sink.getLeftTupleSource(), nodeTypesInSegment);
                 pmem = null;
             }
         }
@@ -1667,14 +1667,14 @@ class LazyPhreakBuilder implements PhreakBuilder {
     private static void restoreSegmentFromPrototype(ReteEvaluator 
reteEvaluator, LeftTupleSource segmentRoot, int nodeTypesInSegment) {
         SegmentMemory smem = 
reteEvaluator.getKnowledgeBase().createSegmentFromPrototype(reteEvaluator, 
segmentRoot);
         if ( smem != null ) {
-            updateRiaAndTerminalMemory(segmentRoot, segmentRoot, smem, 
reteEvaluator, true, nodeTypesInSegment);
+            updateRiaAndTerminalMemory(reteEvaluator, segmentRoot, 
segmentRoot, smem, true, nodeTypesInSegment);
         }
     }
 
-    private static int checkSegmentBoundary(LeftTupleSource lt, ReteEvaluator 
reteEvaluator, int nodeTypesInSegment) {
+    private static int checkSegmentBoundary(ReteEvaluator reteEvaluator, 
LeftTupleSource lt, int nodeTypesInSegment) {
         if ( isRootNode( lt, null ) )  {
             // we are in a new child segment
-            checkEagerSegmentCreation(lt.getLeftTupleSource(), reteEvaluator, 
nodeTypesInSegment);
+            checkEagerSegmentCreation(reteEvaluator, lt.getLeftTupleSource(), 
nodeTypesInSegment);
             nodeTypesInSegment = 0;
         }
         return updateNodeTypesMask(lt, nodeTypesInSegment);
@@ -1700,12 +1700,12 @@ class LazyPhreakBuilder implements PhreakBuilder {
         return false;
     }
 
-    public static void checkEagerSegmentCreation(LeftTupleSource lt, 
ReteEvaluator reteEvaluator, int nodeTypesInSegment) {
+    public static void checkEagerSegmentCreation(ReteEvaluator reteEvaluator, 
LeftTupleSource lt, int nodeTypesInSegment) {
         // A Not node has to be eagerly initialized unless in its segment 
there is at least a join node
         if ( isSet(nodeTypesInSegment, NOT_NODE_BIT) &&
                 !isSet(nodeTypesInSegment, JOIN_NODE_BIT) &&
                 !isSet(nodeTypesInSegment, REACTIVE_EXISTS_NODE_BIT) ) {
-            getOrCreateSegmentMemory(lt, reteEvaluator);
+            getOrCreateSegmentMemory(reteEvaluator, lt);
         }
     }
 }
diff --git 
a/drools-core/src/main/java/org/drools/core/phreak/PropagationEntry.java 
b/drools-core/src/main/java/org/drools/core/phreak/PropagationEntry.java
index 913d705ae2..b15bd92ba3 100644
--- a/drools-core/src/main/java/org/drools/core/phreak/PropagationEntry.java
+++ b/drools-core/src/main/java/org/drools/core/phreak/PropagationEntry.java
@@ -186,7 +186,7 @@ public interface PropagationEntry {
             LeftInputAdapterNode lian = (LeftInputAdapterNode) lts;
             LeftInputAdapterNode.LiaNodeMemory lmem = 
reteEvaluator.getNodeMemory( lian );
             if ( lmem.getSegmentMemory() == null ) {
-                RuntimeSegmentUtilities.getOrCreateSegmentMemory(lmem, lts, 
reteEvaluator);
+                
RuntimeSegmentUtilities.getOrCreateSegmentMemory(reteEvaluator, lts, lmem);
             }
 
             LeftInputAdapterNode.doInsertObject( handle, pCtx, lian, 
reteEvaluator, lmem, false, queryObject.isOpen() );
diff --git 
a/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java 
b/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java
index 1a7b0d876f..643df2872c 100644
--- a/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java
+++ b/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java
@@ -287,7 +287,7 @@ public class RuleNetworkEvaluator {
                         // this is needed for subnetworks that feed into a 
parent network that has no right inputs,
                         // and may not yet be initialized
                         if ( smem.isEmpty() && 
!NodeTypeEnums.isTerminalNode(smem.getTipNode()) ) {
-                            
RuntimeSegmentUtilities.createChildSegments(activationsManager.getReteEvaluator(),
 smem, smem.getTipNode().getSinkPropagator());
+                            
RuntimeSegmentUtilities.createChildSegments(activationsManager.getReteEvaluator(),
 smem.getTipNode().getSinkPropagator(), smem);
                         }
                         
                         smem = smems[i];
@@ -447,7 +447,7 @@ public class RuleNetworkEvaluator {
         if (node == smem.getTipNode()) {
             // we are about to process the segment tip, allow it to merge 
insert/update/delete clashes
             if ( smem.isEmpty() ) {
-                RuntimeSegmentUtilities.createChildSegments(reteEvaluator, 
smem, ((LeftTupleSource) node).getSinkPropagator());
+                RuntimeSegmentUtilities.createChildSegments(reteEvaluator, 
((LeftTupleSource) node).getSinkPropagator(), smem);
             }
             return smem.getFirst().getStagedLeftTuples().takeAll();
         } else {
diff --git 
a/drools-core/src/main/java/org/drools/core/phreak/RuntimeSegmentUtilities.java 
b/drools-core/src/main/java/org/drools/core/phreak/RuntimeSegmentUtilities.java
index 4564a1c0b1..9d4f464aa5 100644
--- 
a/drools-core/src/main/java/org/drools/core/phreak/RuntimeSegmentUtilities.java
+++ 
b/drools-core/src/main/java/org/drools/core/phreak/RuntimeSegmentUtilities.java
@@ -47,14 +47,14 @@ public class RuntimeSegmentUtilities {
     /**
      * Initialises the NodeSegment memory for all nodes in the segment.
      */
-    public static SegmentMemory getOrCreateSegmentMemory(LeftTupleNode node, 
ReteEvaluator reteEvaluator) {
-        return 
getOrCreateSegmentMemory(reteEvaluator.getNodeMemory((MemoryFactory<? extends 
Memory>) node), node, reteEvaluator);
+    public static SegmentMemory getOrCreateSegmentMemory(ReteEvaluator 
reteEvaluator, LeftTupleNode node) {
+        return getOrCreateSegmentMemory(reteEvaluator, node, 
reteEvaluator.getNodeMemory((MemoryFactory<? extends Memory>) node));
     }
 
     /**
      * Initialises the NodeSegment memory for all nodes in the segment.
      */
-    public static SegmentMemory getOrCreateSegmentMemory(Memory memory, 
LeftTupleNode node, ReteEvaluator reteEvaluator) {
+    public static SegmentMemory getOrCreateSegmentMemory(ReteEvaluator 
reteEvaluator, LeftTupleNode node, Memory memory) {
         SegmentMemory smem = memory.getSegmentMemory();
         if ( smem != null ) {
             return smem;
@@ -66,7 +66,7 @@ public class RuntimeSegmentUtilities {
         smem = restoreSegmentFromPrototype(reteEvaluator, segmentRoot);
         if ( smem != null ) {
             if (NodeTypeEnums.isBetaNode(segmentRoot) && 
segmentRoot.isRightInputIsRiaNode()) {
-                createRiaSegmentMemory((BetaNode) segmentRoot, reteEvaluator);
+                createRiaSegmentMemory(reteEvaluator, (BetaNode) segmentRoot);
             }
             return smem;
         }
@@ -99,23 +99,23 @@ public class RuntimeSegmentUtilities {
 
         SegmentMemory smem = 
reteEvaluator.getKnowledgeBase().createSegmentFromPrototype(reteEvaluator, 
proto);
 
-        updateRiaAndTerminalMemory(smem, proto, reteEvaluator);
+        updateRiaAndTerminalMemory(reteEvaluator, smem, proto);
 
         return smem;
     }
 
     public static SegmentMemory getQuerySegmentMemory(ReteEvaluator 
reteEvaluator, QueryElementNode queryNode) {
         ObjectTypeNode queryOtn = 
reteEvaluator.getDefaultEntryPoint().getEntryPointNode().getQueryNode();
-        LeftInputAdapterNode liaNode = 
getQueryLiaNode(queryNode.getQueryElement().getQueryName(), queryOtn);
+        LeftInputAdapterNode liaNode = getQueryLiaNode(queryOtn, 
queryNode.getQueryElement().getQueryName());
         LiaNodeMemory liam = reteEvaluator.getNodeMemory(liaNode);
         SegmentMemory querySmem = liam.getSegmentMemory();
         if (querySmem == null) {
-            querySmem = getOrCreateSegmentMemory(liam, liaNode, reteEvaluator);
+            querySmem = getOrCreateSegmentMemory(reteEvaluator, liaNode, liam);
         }
         return querySmem;
     }
 
-    static RightInputAdapterNode createRiaSegmentMemory( BetaNode betaNode, 
ReteEvaluator reteEvaluator ) {
+    static RightInputAdapterNode createRiaSegmentMemory( ReteEvaluator 
reteEvaluator, BetaNode betaNode ) {
         RightInputAdapterNode riaNode = (RightInputAdapterNode) 
betaNode.getRightInput();
 
         LeftTupleSource subnetworkLts = riaNode.getStartTupleSource();
@@ -124,12 +124,12 @@ public class RuntimeSegmentUtilities {
         SegmentMemory subNetworkSegmentMemory = 
rootSubNetwokrMem.getSegmentMemory();
         if (subNetworkSegmentMemory == null) {
             // we need to stop recursion here
-            getOrCreateSegmentMemory(rootSubNetwokrMem, subnetworkLts, 
reteEvaluator);
+            getOrCreateSegmentMemory(reteEvaluator, subnetworkLts, 
rootSubNetwokrMem);
         }
         return riaNode;
     }
 
-    public static void createChildSegments(ReteEvaluator reteEvaluator, 
SegmentMemory smem, LeftTupleSinkPropagator sinkProp) {
+    public static void createChildSegments(ReteEvaluator reteEvaluator, 
LeftTupleSinkPropagator sinkProp, SegmentMemory smem) {
         if ( !smem.isEmpty() ) {
               return; // this can happen when multiple threads are trying to 
initialize the segment
         }
@@ -144,7 +144,7 @@ public class RuntimeSegmentUtilities {
     public static SegmentMemory createChildSegment(ReteEvaluator 
reteEvaluator, LeftTupleNode node) {
         Memory memory = reteEvaluator.getNodeMemory((MemoryFactory) node);
         if (memory.getSegmentMemory() == null) {
-            getOrCreateSegmentMemory(memory, node, reteEvaluator);
+            getOrCreateSegmentMemory(reteEvaluator, node, memory);
         }
         return memory.getSegmentMemory();
     }
@@ -157,9 +157,9 @@ public class RuntimeSegmentUtilities {
      * This is because the rianode only cares if all of it's segments are 
linked, then
      * it sets the bit of node it is the right input for.
      */
-    private static void updateRiaAndTerminalMemory(SegmentMemory smem,
-                                                   SegmentPrototype proto,
-                                                   ReteEvaluator 
reteEvaluator) {
+    private static void updateRiaAndTerminalMemory(ReteEvaluator reteEvaluator,
+                                                   SegmentMemory smem,
+                                                   SegmentPrototype proto) {
         for (PathEndNode endNode : proto.getPathEndNodes()) {
             if (!isInsideSubnetwork(endNode, proto)) {
                 // While SegmentPrototypes are added for entire path, for 
traversal reasons.
@@ -202,13 +202,13 @@ public class RuntimeSegmentUtilities {
         if (pathEndNode.getEagerSegmentPrototypes() != null) {
             for (SegmentPrototype eager : 
pathEndNode.getEagerSegmentPrototypes()) {
                 if ( pmem.getSegmentMemories()[eager.getPos()] == null) {
-                    getOrCreateSegmentMemory(eager.getRootNode(), 
reteEvaluator);
+                    getOrCreateSegmentMemory(reteEvaluator, 
eager.getRootNode());
                 }
             }
         }
     }
 
-    private static LeftInputAdapterNode getQueryLiaNode(String queryName, 
ObjectTypeNode queryOtn) {
+    private static LeftInputAdapterNode getQueryLiaNode(ObjectTypeNode 
queryOtn, String queryName) {
         for (ObjectSink sink : queryOtn.getObjectSinkPropagator().getSinks()) {
             AlphaNode alphaNode = (AlphaNode) sink;
             QueryNameConstraint nameConstraint = (QueryNameConstraint) 
alphaNode.getConstraint();
diff --git 
a/drools-core/src/main/java/org/drools/core/phreak/SegmentPropagator.java 
b/drools-core/src/main/java/org/drools/core/phreak/SegmentPropagator.java
index 9d7ef763b2..4761b71e46 100644
--- a/drools-core/src/main/java/org/drools/core/phreak/SegmentPropagator.java
+++ b/drools-core/src/main/java/org/drools/core/phreak/SegmentPropagator.java
@@ -44,7 +44,7 @@ public class SegmentPropagator {
         LeftTupleSource source = ( LeftTupleSource )  
sourceSegment.getTipNode();
         
         if ( sourceSegment.isEmpty() ) {
-            RuntimeSegmentUtilities.createChildSegments(reteEvaluator, 
sourceSegment, source.getSinkPropagator());
+            RuntimeSegmentUtilities.createChildSegments(reteEvaluator, 
source.getSinkPropagator(), sourceSegment);
         }
                 
         processPeers(sourceSegment, leftTuples);
diff --git 
a/drools-core/src/main/java/org/drools/core/reteoo/LeftInputAdapterNode.java 
b/drools-core/src/main/java/org/drools/core/reteoo/LeftInputAdapterNode.java
index 55b6167d9f..8a340bb60b 100644
--- a/drools-core/src/main/java/org/drools/core/reteoo/LeftInputAdapterNode.java
+++ b/drools-core/src/main/java/org/drools/core/reteoo/LeftInputAdapterNode.java
@@ -176,8 +176,8 @@ public class LeftInputAdapterNode extends LeftTupleSource
             // liaNode in its own segment and child segments not yet created
             if ( sm.isEmpty() ) {
                 RuntimeSegmentUtilities.createChildSegments(reteEvaluator,
-                                                            sm,
-                                                            
liaNode.getSinkPropagator());
+                                                            
liaNode.getSinkPropagator(),
+                                                            sm);
             }
             sm = sm.getFirst(); // repoint to the child sm
         }
@@ -268,8 +268,8 @@ public class LeftInputAdapterNode extends LeftTupleSource
             // liaNode in it's own segment and child segments not yet created
             if ( sm.isEmpty() ) {
                 RuntimeSegmentUtilities.createChildSegments(reteEvaluator,
-                                                            sm,
-                                                            
liaNode.getSinkPropagator());
+                                                            
liaNode.getSinkPropagator(),
+                                                            sm);
             }
             sm = sm.getFirst(); // repoint to the child sm
         }
@@ -328,8 +328,8 @@ public class LeftInputAdapterNode extends LeftTupleSource
             // liaNode in it's own segment and child segments not yet created
             if ( sm.isEmpty() ) {
                 RuntimeSegmentUtilities.createChildSegments(reteEvaluator,
-                                                            sm,
-                                                            
liaNode.getSinkPropagator());
+                                                            
liaNode.getSinkPropagator(),
+                                                            sm);
             }
             sm = sm.getFirst(); // repoint to the child sm
         }
diff --git 
a/drools-kiesession/src/test/java/org/drools/kiesession/NodeSegmentUnlinkingTest.java
 
b/drools-kiesession/src/test/java/org/drools/kiesession/NodeSegmentUnlinkingTest.java
index 6fbaf0616a..f6793136a7 100644
--- 
a/drools-kiesession/src/test/java/org/drools/kiesession/NodeSegmentUnlinkingTest.java
+++ 
b/drools-kiesession/src/test/java/org/drools/kiesession/NodeSegmentUnlinkingTest.java
@@ -272,7 +272,7 @@ public class NodeSegmentUnlinkingTest {
 
         StatefulKnowledgeSessionImpl ksession = 
(StatefulKnowledgeSessionImpl)kBase.newKieSession();
 
-        RuntimeSegmentUtilities.getOrCreateSegmentMemory(liaNode, ksession);
+        RuntimeSegmentUtilities.getOrCreateSegmentMemory(ksession, liaNode);
         liaNode.assertObject((InternalFactHandle) ksession.insert("str"), 
context, ksession);
         
 
@@ -305,7 +305,7 @@ public class NodeSegmentUnlinkingTest {
         // Initialise from lian
         StatefulKnowledgeSessionImpl ksession = 
(StatefulKnowledgeSessionImpl)kBase.newKieSession();
 
-        RuntimeSegmentUtilities.getOrCreateSegmentMemory(liaNode, ksession);
+        RuntimeSegmentUtilities.getOrCreateSegmentMemory(ksession, liaNode);
         
         InternalFactHandle fh1 = (InternalFactHandle) ksession.insert( "str1" 
);
         n1.assertObject( fh1, context, ksession );
@@ -497,7 +497,7 @@ public class NodeSegmentUnlinkingTest {
                                                   InternalWorkingMemory wm) {
         BetaMemory betaMemory = (BetaMemory) wm.getNodeMemory(node);
         if ( betaMemory.getSegmentMemory() == null ) {
-            RuntimeSegmentUtilities.getOrCreateSegmentMemory(node, wm);
+            RuntimeSegmentUtilities.getOrCreateSegmentMemory(wm, node);
         }
         return betaMemory;
 
diff --git 
a/drools-kiesession/src/test/java/org/drools/kiesession/RuleUnlinkingTest.java 
b/drools-kiesession/src/test/java/org/drools/kiesession/RuleUnlinkingTest.java
index 27b2a85fdb..cbd05125d4 100644
--- 
a/drools-kiesession/src/test/java/org/drools/kiesession/RuleUnlinkingTest.java
+++ 
b/drools-kiesession/src/test/java/org/drools/kiesession/RuleUnlinkingTest.java
@@ -321,7 +321,7 @@ public class RuleUnlinkingTest {
 
         DefaultFactHandle f1 = (DefaultFactHandle) wm.insert( "test1" );
 
-        RuntimeSegmentUtilities.getOrCreateSegmentMemory(liaNode, wm);
+        RuntimeSegmentUtilities.getOrCreateSegmentMemory(wm, liaNode);
         liaNode.assertObject( f1, context, wm );
         n1.assertObject( f1, context, wm );
         n3.assertObject( f1, context, wm );
@@ -382,7 +382,7 @@ public class RuleUnlinkingTest {
                                                   InternalWorkingMemory wm) {
         BetaMemory betaMemory = (BetaMemory) wm.getNodeMemory(node);
         if ( betaMemory.getSegmentMemory() == null ) {
-            RuntimeSegmentUtilities.getOrCreateSegmentMemory(node, wm);
+            RuntimeSegmentUtilities.getOrCreateSegmentMemory(wm, node);
         }
         return betaMemory;
 
diff --git 
a/drools-kiesession/src/test/java/org/drools/kiesession/RuleUnlinkingWithSegmentMemoryTest.java
 
b/drools-kiesession/src/test/java/org/drools/kiesession/RuleUnlinkingWithSegmentMemoryTest.java
index 80bbeb9f26..86cb5209bb 100644
--- 
a/drools-kiesession/src/test/java/org/drools/kiesession/RuleUnlinkingWithSegmentMemoryTest.java
+++ 
b/drools-kiesession/src/test/java/org/drools/kiesession/RuleUnlinkingWithSegmentMemoryTest.java
@@ -223,12 +223,12 @@ public class RuleUnlinkingWithSegmentMemoryTest {
         PathMemory rtn3Rs = wm.getNodeMemory( rtn3 );
 
         // lian
-        RuntimeSegmentUtilities.getOrCreateSegmentMemory(lian, wm);
+        RuntimeSegmentUtilities.getOrCreateSegmentMemory(wm, lian);
         LeftInputAdapterNode.LiaNodeMemory lmem = wm.getNodeMemory( lian );
         assertThat(lmem.getNodePosMaskBit()).isEqualTo(1);
 
         // n1
-        RuntimeSegmentUtilities.getOrCreateSegmentMemory(n1, wm);
+        RuntimeSegmentUtilities.getOrCreateSegmentMemory(wm, n1);
         bm = (BetaMemory) wm.getNodeMemory(n1);
         assertThat(bm.getNodePosMaskBit()).isEqualTo(2);
         assertThat(bm.getSegmentMemory().getAllLinkedMaskTest()).isEqualTo(15);
@@ -262,7 +262,7 @@ public class RuleUnlinkingWithSegmentMemoryTest {
         assertThat(list.contains(rtn3Rs)).isTrue();           
         
         // n4
-        RuntimeSegmentUtilities.getOrCreateSegmentMemory(n4, wm);
+        RuntimeSegmentUtilities.getOrCreateSegmentMemory(wm, n4);
         bm = (BetaMemory) wm.getNodeMemory(n4);
         assertThat(bm.getNodePosMaskBit()).isEqualTo(1);
         assertThat(bm.getSegmentMemory().getAllLinkedMaskTest()).isEqualTo(3);
@@ -283,7 +283,7 @@ public class RuleUnlinkingWithSegmentMemoryTest {
         assertThat(list.contains(rtn3Rs)).isTrue();
         
         // n6
-        RuntimeSegmentUtilities.getOrCreateSegmentMemory(n6, wm);
+        RuntimeSegmentUtilities.getOrCreateSegmentMemory(wm, n6);
         bm = (BetaMemory) wm.getNodeMemory(n6);
         assertThat(bm.getNodePosMaskBit()).isEqualTo(1);
         assertThat(bm.getSegmentMemory().getAllLinkedMaskTest()).isEqualTo(7);
diff --git 
a/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/LinkingTest.java
 
b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/LinkingTest.java
index 04a73eb3e3..e69fc525aa 100644
--- 
a/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/LinkingTest.java
+++ 
b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/LinkingTest.java
@@ -423,7 +423,7 @@ public class LinkingTest {
         JoinNode eNode = ( JoinNode ) 
exists1n.getSinkPropagator().getSinks()[0];
         RuleTerminalNode rtn = ( RuleTerminalNode ) 
eNode.getSinkPropagator().getSinks()[0];
 
-        RuntimeSegmentUtilities.getOrCreateSegmentMemory(exists1n, wm);
+        RuntimeSegmentUtilities.getOrCreateSegmentMemory(wm, exists1n);
         BetaMemory existsBm = (BetaMemory) wm.getNodeMemory(exists1n);
 
         
assertThat(existsBm.getSegmentMemory().getLinkedNodeMask()).isEqualTo(0);
@@ -1039,7 +1039,7 @@ public class LinkingTest {
         NotNode bNode = ( NotNode) aNode.getSinkPropagator().getSinks()[0];    
    
         JoinNode cNode = ( JoinNode) bNode.getSinkPropagator().getSinks()[0];  
              
         
-        RuntimeSegmentUtilities.getOrCreateSegmentMemory(cNode, wm);
+        RuntimeSegmentUtilities.getOrCreateSegmentMemory(wm, cNode);
         LiaNodeMemory amem = wm.getNodeMemory(aNode);
 
         // Only NotNode is linked in
@@ -1116,7 +1116,7 @@ public class LinkingTest {
         NotNode bNode = ( NotNode) aNode.getSinkPropagator().getSinks()[0];    
    
         JoinNode cNode = ( JoinNode) bNode.getSinkPropagator().getSinks()[0];  
              
         
-        RuntimeSegmentUtilities.getOrCreateSegmentMemory(cNode, wm);
+        RuntimeSegmentUtilities.getOrCreateSegmentMemory(wm, cNode);
         LiaNodeMemory amem = wm.getNodeMemory(aNode);
 
         // Only NotNode is linked in


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to