diff -r fd8c3312d043 -r 576736088436 jdk/test/java/awt/Window/WindowsLeak/WindowsLeak.java --- a/jdk/test/java/awt/Window/WindowsLeak/WindowsLeak.java Fri May 27 13:26:56 2016 -0700 +++ b/jdk/test/java/awt/Window/WindowsLeak/WindowsLeak.java Sun May 29 02:10:14 2016 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,42 +23,42 @@ /* * @test - * @bug 8013563 + * @bug 8013563 8028486 * @summary Tests that windows are removed from windows list + * @library /javax/swing/regtesthelpers * @modules java.desktop/sun.awt + * java.desktop/sun.java2d + * @build Util * @run main/othervm -Xms32M -Xmx32M WindowsLeak */ -import java.awt.*; -import sun.awt.AppContext; +import java.awt.Frame; +import java.awt.Robot; +import java.awt.Window; +import java.lang.ref.WeakReference; +import java.util.Vector; -import java.lang.ref.WeakReference; - -import java.util.Vector; +import sun.awt.AppContext; +import sun.java2d.Disposer; public class WindowsLeak { - public static void main(String[] args) { - for (int i = 0; i < 100; i++) - { + private static volatile boolean disposerPhantomComplete; + + public static void main(String[] args) throws Exception { + Robot r = new Robot(); + for (int i = 0; i < 100; i++) { Frame f = new Frame(); f.pack(); f.dispose(); } + r.waitForIdle(); - Vector garbage = new Vector(); - while (true) - { - try - { - garbage.add(new byte[1000]); - } - catch (OutOfMemoryError e) - { - break; - } + Disposer.addRecord(new Object(), () -> disposerPhantomComplete = true); + + while (!disposerPhantomComplete) { + Util.generateOOME(); } - garbage = null; Vector> windowList = (Vector>) AppContext.getAppContext().get(Window.class);