# HG changeset patch # User sjohanss # Date 1475757827 -7200 # Thu Oct 06 14:43:47 2016 +0200 # Node ID 1bd7fe36bd3544428bc13e1663a54d39100917e9 # Parent 5581ec77401fe486c58b15b2bc12ee16bcefd7bf imported patch steal001-timeout-fix diff --git a/tonga/src/gc/gctests/Steal/steal001/steal001.java b/tonga/src/gc/gctests/Steal/steal001/steal001.java --- a/tonga/src/gc/gctests/Steal/steal001/steal001.java +++ b/tonga/src/gc/gctests/Steal/steal001/steal001.java @@ -31,7 +31,7 @@ ExecutionController stresser; public Eater(int nodeSize) { - list = new ArrayList(); + list = new ArrayList<>(); this.nodeSize = nodeSize; } @@ -52,7 +52,7 @@ private void fillHeap(int n) { try { while (stresser.continueExecution()) { - list.add(new NonbranchyTree(n, 0.3f, nodeSize)); + list.add(new NonbranchyTree(n, 0.3f, nodeSize, stresser)); } } catch (OutOfMemoryError e) { } diff --git a/tonga/src/nsk/share/gc/NonbranchyTree.java b/tonga/src/nsk/share/gc/NonbranchyTree.java --- a/tonga/src/nsk/share/gc/NonbranchyTree.java +++ b/tonga/src/nsk/share/gc/NonbranchyTree.java @@ -8,6 +8,8 @@ import java.io.*; import java.util.*; +import nsk.share.test.ExecutionController; + /** * NonbranchyTree defines a tree structure. Each node of the tree * always has one son. A node may have the second son with probability @@ -22,8 +24,10 @@ public final static int MIN_NODE_SIZE = 20; private Node root; private Random random; + private int numberOfNodes; private float branchiness; private int size; + private ExecutionController controller; /** * Creates a new tree with number of nodes not more than @@ -42,32 +46,53 @@ * */ public NonbranchyTree(int numberOfNodes, float branchiness, int size) { - if (numberOfNodes < 1) + this.numberOfNodes = numberOfNodes; + this.branchiness = branchiness; + this.size = size; + this.random = new Random(System.currentTimeMillis()); + this.controller = null; + initTree(); + } + + public NonbranchyTree(int numberOfNodes, float branchiness, int size, ExecutionController controller) { + this.numberOfNodes = numberOfNodes; + this.branchiness = branchiness; + this.size = size; + this.random = new Random(System.currentTimeMillis()); + this.controller = controller; + initTree(); + } + + private void initTree() { + if (numberOfNodes < 1) { throw new IllegalArgumentException("Illegal number of nodes: " + numberOfNodes + ", must be at " + "least 1."); - if ( (branchiness >= 1) || (branchiness <= 0) ) + } + if ( (branchiness >= 1) || (branchiness <= 0) ) { throw new IllegalArgumentException("Illegal value of branchiness: " + numberOfNodes + ", must be at " + "greater than 0 and less than " + " 1."); - if (size < 1) + } + if (size < 1) { throw new IllegalArgumentException("Illegal size of nodes: " + size + ", must be at least 1."); - - random = new Random(System.currentTimeMillis()); + } root = createTree(numberOfNodes, size); - this.branchiness = branchiness; } // Create a new tree with specified number of nodes and size of each node private Node createTree(int numberOfNodes, int size) { + // Make sure we respect the controller and stop test after + // given time. + if (controller != null && !controller.continueExecution()) { + return null; + } + Node node = new Node(size); - try { - if (numberOfNodes == 0) { - // No more nodes need to be built return null; } else if (numberOfNodes == 1) { @@ -76,10 +101,8 @@ node.left = createTree(1, size); return node; } else { - // Create a few nodes if (makeRightNode()) { - // The node will have two sons int leftNodes = 1 + random.nextInt(numberOfNodes - 2); int rightNodes = numberOfNodes - 1 - leftNodes; @@ -87,7 +110,6 @@ node.left = createTree(leftNodes, size); node.right = createTree(rightNodes, size); } else { - // The node will have just one son Node leftTree = createTree(numberOfNodes - 1, size); node.left = leftTree; @@ -95,11 +117,9 @@ return node; } // if } catch(StackOverflowError e) { - // No more memory for such long tree return node; } catch(OutOfMemoryError e) { - // No more memory for such long tree return node; } // try