From c99f13bd178a00373c4d3bed77be5a41ff58f13c Mon Sep 17 00:00:00 2001
From: John Cortell <john.cortell@freescale.com>
Date: Fri, 2 Oct 2009 16:22:59 +0000
Subject: [PATCH] [291224] Heavy MultiRequestMonitor used where lighter
 CountingRequestMonitor equally does the job

---
 .../DefaultVMModelProxyStrategy.java          | 25 ++++++++-----------
 1 file changed, 11 insertions(+), 14 deletions(-)

diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/DefaultVMModelProxyStrategy.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/DefaultVMModelProxyStrategy.java
index 48fa44e8807..33be4cd23c3 100644
--- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/DefaultVMModelProxyStrategy.java
+++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/DefaultVMModelProxyStrategy.java
@@ -525,11 +525,13 @@ public class DefaultVMModelProxyStrategy implements IVMModelProxy {
                         protected void handleCompleted() {
                             if (fDisposed) return;
                             
+                            final List<Object> childElements = getData();
+                            
                             // Check for an empty list of elements.  If the list of elements is empty
                             // still call the child nodes using the parent delta only.  Do this only if
                             // an optimization was used to build the delta, so that the child node can  
                             // adds the optimized delta flags without the full delta (bug 280770).
-                            if (getData() == null || getData().size() == 0) {
+                            if (childElements == null || childElements.size() == 0) {
                                 if (updateFlagsOnly) {
                                     callChildNodesToBuildDelta(
                                         node, childNodesWithDeltaFlags, parentDelta, event, rm);
@@ -538,26 +540,21 @@ public class DefaultVMModelProxyStrategy implements IVMModelProxy {
                                     return;
                                 }
                             } else {
-                                final MultiRequestMonitor<RequestMonitor> elementsDeltasMultiRequestMon = 
-                                    new MultiRequestMonitor<RequestMonitor>(getVMProvider().getExecutor(), rm);
+                                final CountingRequestMonitor countingRM = new CountingRequestMonitor(getVMProvider().getExecutor(), rm);
+                                int rmCount = 0;
         
                                 // For each element from this node, create a new delta, 
                                 // and then call all the child nodes to build their delta. 
-                                for (int i = 0; i < getData().size(); i++) {
+                                for (int i = 0; i < childElements.size(); i++) {
                                     int elementIndex = nodeOffset >= 0 ? nodeOffset + i : -1;
-                                    VMDelta delta= parentDelta.getChildDelta(getData().get(i));
+                                    VMDelta delta= parentDelta.getChildDelta(childElements.get(i));
                                     if (delta == null) {
-                                        delta= parentDelta.addNode(getData().get(i), elementIndex, IModelDelta.NO_CHANGE);
+                                        delta= parentDelta.addNode(childElements.get(i), elementIndex, IModelDelta.NO_CHANGE);
                                     }
-                                    callChildNodesToBuildDelta(
-                                        node, childNodesWithDeltaFlags, delta, event, 
-                                        elementsDeltasMultiRequestMon.add(new RequestMonitor(getVMProvider().getExecutor(), null) { 
-                                            @Override
-                                            protected void handleCompleted() {
-                                                elementsDeltasMultiRequestMon.requestMonitorDone(this);
-                                            }
-                                        }));
+                                    callChildNodesToBuildDelta(node, childNodesWithDeltaFlags, delta, event, countingRM);
+                                    rmCount++;
                                 }
+                                countingRM.setDoneCount(rmCount);
                             }
                         }
                     })