From 33c5b92bc69af16581d91e8e71fb8822ea89f84d Mon Sep 17 00:00:00 2001 From: Sergey Bylokhov Date: Mon, 29 Jun 2015 01:27:08 +0300 Subject: [PATCH] 8080405: Exception in thread "AWT-EventQueue-1" java.security.AccessControlException Reviewed-by: prr, chegar, art --- .../classes/sun/misc/ManagedLocalsThread.java | 7 +- .../com/apple/laf/AquaFileSystemModel.java | 8 +- .../macosx/classes/sun/font/CFontManager.java | 21 ++-- .../macosx/classes/sun/lwawt/LWToolkit.java | 19 +--- .../lwawt/macosx/CDragSourceContextPeer.java | 8 +- .../classes/sun/lwawt/macosx/CFileDialog.java | 8 +- .../sun/lwawt/macosx/CPrinterDialogPeer.java | 6 +- .../classes/sun/lwawt/macosx/CPrinterJob.java | 11 +- .../com/sun/imageio/stream/StreamCloser.java | 22 ++-- .../plaf/windows/WindowsLookAndFeel.java | 8 +- .../sun/media/sound/JSSecurityManager.java | 10 +- .../com/sun/media/sound/SoftAudioPusher.java | 8 +- .../sun/media/sound/SoftJitterCorrector.java | 8 +- .../com/sun/media/sound/SoftSynthesizer.java | 8 +- .../classes/java/awt/EventDispatchThread.java | 4 +- .../renderable/RenderableImageProducer.java | 9 +- .../share/classes/javax/swing/JTable.java | 7 +- .../share/classes/javax/swing/TimerQueue.java | 13 +-- .../swing/plaf/basic/BasicDirectoryModel.java | 6 +- .../javax/swing/text/JTextComponent.java | 6 +- .../classes/javax/swing/text/LayoutQueue.java | 7 +- .../classes/sun/applet/AppletClassLoader.java | 4 +- .../classes/sun/awt/AWTAutoShutdown.java | 13 +-- .../share/classes/sun/awt/AppContext.java | 14 +-- .../sun/awt/im/InputMethodManager.java | 9 +- .../classes/sun/awt/image/ImageFetcher.java | 4 +- .../classes/sun/font/CreatedFontTracker.java | 22 ++-- .../classes/sun/font/SunFontManager.java | 12 +- .../share/classes/sun/java2d/Disposer.java | 13 +-- .../sun/java2d/loops/GraphicsPrimitive.java | 12 +- .../sun/java2d/opengl/OGLRenderQueue.java | 7 +- .../share/classes/sun/print/PrintJob2D.java | 9 +- .../classes/sun/print/ServiceNotifier.java | 4 +- .../sun/awt/X11/GtkFileDialogPeer.java | 9 +- .../unix/classes/sun/awt/X11/InfoWindow.java | 9 +- .../unix/classes/sun/awt/X11/XToolkit.java | 16 +-- .../classes/sun/awt/X11GraphicsDevice.java | 10 +- .../sun/print/PrintServiceLookupProvider.java | 9 +- .../awt/shell/Win32ShellFolderManager2.java | 28 ++--- .../sun/awt/windows/WFileDialogPeer.java | 8 +- .../sun/awt/windows/WPageDialogPeer.java | 8 +- .../sun/awt/windows/WPrintDialogPeer.java | 8 +- .../classes/sun/awt/windows/WToolkit.java | 19 +--- .../java2d/d3d/D3DScreenUpdateManager.java | 20 +--- .../sun/print/PrintServiceLookupProvider.java | 9 +- .../PropertyPermissionOnEDT.java | 105 ++++++++++++++++++ .../PropertyPermissionOnEDT/java.policy | 4 + 47 files changed, 251 insertions(+), 338 deletions(-) create mode 100644 jdk/test/java/awt/EventDispatchThread/PropertyPermissionOnEDT/PropertyPermissionOnEDT.java create mode 100644 jdk/test/java/awt/EventDispatchThread/PropertyPermissionOnEDT/java.policy diff --git a/jdk/src/java.base/share/classes/sun/misc/ManagedLocalsThread.java b/jdk/src/java.base/share/classes/sun/misc/ManagedLocalsThread.java index cd75ef237ce..f520ca384b6 100644 --- a/jdk/src/java.base/share/classes/sun/misc/ManagedLocalsThread.java +++ b/jdk/src/java.base/share/classes/sun/misc/ManagedLocalsThread.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, 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 @@ -48,6 +48,11 @@ public class ManagedLocalsThread extends Thread { eraseThreadLocals(); } + public ManagedLocalsThread(ThreadGroup group, Runnable target) { + super(group, target); + eraseThreadLocals(); + } + public ManagedLocalsThread(Runnable target, String name) { super(target, name); eraseThreadLocals(); diff --git a/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaFileSystemModel.java b/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaFileSystemModel.java index 7aa82f51a9e..266d5065ca3 100644 --- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaFileSystemModel.java +++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaFileSystemModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, 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 @@ -383,11 +383,7 @@ class AquaFileSystemModel extends AbstractTableModel implements PropertyChangeLi this.currentDirectory = currentDirectory; this.fid = fid; String name = "Aqua L&F File Loading Thread"; - if (System.getSecurityManager() == null) { - this.loadThread = new Thread(FilesLoader.this, name); - } else { - this.loadThread = new ManagedLocalsThread(FilesLoader.this, name); - } + this.loadThread = new ManagedLocalsThread(this, name); this.loadThread.start(); } diff --git a/jdk/src/java.desktop/macosx/classes/sun/font/CFontManager.java b/jdk/src/java.desktop/macosx/classes/sun/font/CFontManager.java index 341af9ff347..d152a5f01c0 100644 --- a/jdk/src/java.desktop/macosx/classes/sun/font/CFontManager.java +++ b/jdk/src/java.desktop/macosx/classes/sun/font/CFontManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, 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 @@ -42,7 +42,7 @@ import sun.awt.FontConfiguration; import sun.awt.HeadlessToolkit; import sun.awt.util.ThreadGroupUtils; import sun.lwawt.macosx.*; -import sun.misc.InnocuousThread; +import sun.misc.ManagedLocalsThread; public final class CFontManager extends SunFontManager { private static Hashtable genericFonts = new Hashtable(); @@ -213,17 +213,12 @@ public final class CFontManager extends SunFontManager { } }; AccessController.doPrivileged((PrivilegedAction) () -> { - if (System.getSecurityManager() == null) { - /* The thread must be a member of a thread group - * which will not get GCed before VM exit. - * Make its parent the top-level thread group. - */ - ThreadGroup rootTG = ThreadGroupUtils.getRootThreadGroup(); - fileCloser = new Thread(rootTG, fileCloserRunnable); - } else { - /* InnocuousThread is a member of a correct TG by default */ - fileCloser = new InnocuousThread(fileCloserRunnable); - } + /* The thread must be a member of a thread group + * which will not get GCed before VM exit. + * Make its parent the top-level thread group. + */ + ThreadGroup rootTG = ThreadGroupUtils.getRootThreadGroup(); + fileCloser = new ManagedLocalsThread(rootTG, fileCloserRunnable); fileCloser.setContextClassLoader(null); Runtime.getRuntime().addShutdownHook(fileCloser); return null; diff --git a/jdk/src/java.desktop/macosx/classes/sun/lwawt/LWToolkit.java b/jdk/src/java.desktop/macosx/classes/sun/lwawt/LWToolkit.java index 4ab5c410830..44136640ccf 100644 --- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/LWToolkit.java +++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/LWToolkit.java @@ -35,7 +35,7 @@ import java.security.*; import java.util.*; import sun.awt.*; -import sun.misc.InnocuousThread; +import sun.misc.ManagedLocalsThread; import sun.print.*; import sun.awt.util.ThreadGroupUtils; @@ -77,22 +77,13 @@ public abstract class LWToolkit extends SunToolkit implements Runnable { shutdown(); waitForRunState(STATE_CLEANUP); }; - Thread shutdown; - if (System.getSecurityManager() == null) { - shutdown = new Thread(ThreadGroupUtils.getRootThreadGroup(), shutdownRunnable); - } else { - shutdown = new InnocuousThread(shutdownRunnable); - } + Thread shutdown = new ManagedLocalsThread( + ThreadGroupUtils.getRootThreadGroup(), shutdownRunnable); shutdown.setContextClassLoader(null); Runtime.getRuntime().addShutdownHook(shutdown); - String name = "AWT-LW"; - Thread toolkitThread; - if (System.getSecurityManager() == null) { - toolkitThread = new Thread(ThreadGroupUtils.getRootThreadGroup(), LWToolkit.this, name); - } else { - toolkitThread = new InnocuousThread(LWToolkit.this, name); - } + Thread toolkitThread = new ManagedLocalsThread( + ThreadGroupUtils.getRootThreadGroup(), this, name); toolkitThread.setDaemon(true); toolkitThread.setPriority(Thread.NORM_PRIORITY + 1); toolkitThread.start(); diff --git a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CDragSourceContextPeer.java b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CDragSourceContextPeer.java index af5c59d420c..10aef016b0c 100644 --- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CDragSourceContextPeer.java +++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CDragSourceContextPeer.java @@ -181,13 +181,7 @@ public final class CDragSourceContextPeer extends SunDragSourceContextPeer { } } }; - Thread dragThread; - if (System.getSecurityManager() == null) { - dragThread = new Thread(dragRunnable); - } else { - dragThread = new ManagedLocalsThread(dragRunnable); - } - dragThread.start(); + new ManagedLocalsThread(dragRunnable).start(); } catch (Exception e) { final long nativeDragSource = getNativeContext(); setNativeContext(0); diff --git a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CFileDialog.java b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CFileDialog.java index 0e8ee1e1fc4..459afae179d 100644 --- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CFileDialog.java +++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CFileDialog.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, 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 @@ -120,11 +120,7 @@ class CFileDialog implements FileDialogPeer { if (visible) { // Java2 Dialog class requires peer to run code in a separate thread // and handles keeping the call modal - if (System.getSecurityManager() == null) { - new Thread(new Task()).start(); - } else { - new ManagedLocalsThread(new Task()).start(); - } + new ManagedLocalsThread(new Task()).start(); } // We hide ourself before "show" returns - setVisible(false) // doesn't apply diff --git a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterDialogPeer.java b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterDialogPeer.java index 6ff3ec01e0e..1837feb0ccd 100644 --- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterDialogPeer.java +++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterDialogPeer.java @@ -59,11 +59,7 @@ public class CPrinterDialogPeer extends LWWindowPeer { printerDialog.setRetVal(printerDialog.showDialog()); printerDialog.setVisible(false); }; - if (System.getSecurityManager() == null) { - new Thread(task).start(); - } else { - new ManagedLocalsThread(task).start(); - } + new ManagedLocalsThread(task).start(); } } diff --git a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java index 4dba1d221e3..a7b200981ed 100644 --- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java +++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, 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 @@ -736,12 +736,7 @@ public final class CPrinterJob extends RasterPrinterJob { // upcall from native private static void detachPrintLoop(final long target, final long arg) { - Runnable task = () -> _safePrintLoop(target, arg); - if (System.getSecurityManager() == null) { - new Thread(task).start(); - } else { - new ManagedLocalsThread(task).start(); - } + new ManagedLocalsThread(() -> _safePrintLoop(target, arg)).start(); } private static native void _safePrintLoop(long target, long arg); @@ -779,4 +774,4 @@ public final class CPrinterJob extends RasterPrinterJob { (float) (paper.getImageableHeight() / dpi), MediaPrintableArea.INCH); } -} \ No newline at end of file +} diff --git a/jdk/src/java.desktop/share/classes/com/sun/imageio/stream/StreamCloser.java b/jdk/src/java.desktop/share/classes/com/sun/imageio/stream/StreamCloser.java index b660f272e2c..32fa02fe175 100644 --- a/jdk/src/java.desktop/share/classes/com/sun/imageio/stream/StreamCloser.java +++ b/jdk/src/java.desktop/share/classes/com/sun/imageio/stream/StreamCloser.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2015, 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 @@ -26,7 +26,7 @@ package com.sun.imageio.stream; import sun.awt.util.ThreadGroupUtils; -import sun.misc.InnocuousThread; +import sun.misc.ManagedLocalsThread; import java.io.IOException; import java.security.AccessController; @@ -87,17 +87,13 @@ public class StreamCloser { }; AccessController.doPrivileged((PrivilegedAction) () -> { - if (System.getSecurityManager() == null) { - /* The thread must be a member of a thread group - * which will not get GCed before VM exit. - * Make its parent the top-level thread group. - */ - ThreadGroup tg = ThreadGroupUtils.getRootThreadGroup(); - streamCloser = new Thread(tg, streamCloserRunnable); - } else { - /* InnocuousThread is a member of a correct TG by default */ - streamCloser = new InnocuousThread(streamCloserRunnable); - } + /* The thread must be a member of a thread group + * which will not get GCed before VM exit. + * Make its parent the top-level thread group. + */ + ThreadGroup tg = ThreadGroupUtils.getRootThreadGroup(); + streamCloser = new ManagedLocalsThread(tg, + streamCloserRunnable); /* Set context class loader to null in order to avoid * keeping a strong reference to an application classloader. */ diff --git a/jdk/src/java.desktop/share/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java b/jdk/src/java.desktop/share/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java index 0a666b12e25..6d379435397 100644 --- a/jdk/src/java.desktop/share/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java +++ b/jdk/src/java.desktop/share/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, 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 @@ -2038,11 +2038,7 @@ public class WindowsLookAndFeel extends BasicLookAndFeel if (audioRunnable != null) { // Runnable appears to block until completed playing, hence // start up another thread to handle playing. - if (System.getSecurityManager() == null) { - new Thread(audioRunnable).start(); - } else { - new ManagedLocalsThread(audioRunnable).start(); - } + new ManagedLocalsThread(audioRunnable).start(); } } } diff --git a/jdk/src/java.desktop/share/classes/com/sun/media/sound/JSSecurityManager.java b/jdk/src/java.desktop/share/classes/com/sun/media/sound/JSSecurityManager.java index 63eaba1c4ec..738704facf4 100644 --- a/jdk/src/java.desktop/share/classes/com/sun/media/sound/JSSecurityManager.java +++ b/jdk/src/java.desktop/share/classes/com/sun/media/sound/JSSecurityManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2015, 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 @@ -25,7 +25,6 @@ package com.sun.media.sound; -import sun.misc.InnocuousThread; import sun.misc.ManagedLocalsThread; import java.io.BufferedInputStream; @@ -147,12 +146,7 @@ final class JSSecurityManager { final String threadName, final boolean isDaemon, final int priority, final boolean doStart) { - Thread thread; - if (System.getSecurityManager() == null) { - thread = new Thread(runnable); - } else { - thread = new ManagedLocalsThread(runnable); - } + Thread thread = new ManagedLocalsThread(runnable); if (threadName != null) { thread.setName(threadName); diff --git a/jdk/src/java.desktop/share/classes/com/sun/media/sound/SoftAudioPusher.java b/jdk/src/java.desktop/share/classes/com/sun/media/sound/SoftAudioPusher.java index a5fdd4e9f86..87f4852714c 100644 --- a/jdk/src/java.desktop/share/classes/com/sun/media/sound/SoftAudioPusher.java +++ b/jdk/src/java.desktop/share/classes/com/sun/media/sound/SoftAudioPusher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2015, 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 @@ -55,11 +55,7 @@ public final class SoftAudioPusher implements Runnable { if (active) return; active = true; - if (System.getSecurityManager() == null) { - audiothread = new Thread(this); - } else { - audiothread = new ManagedLocalsThread(this); - } + audiothread = new ManagedLocalsThread(this); audiothread.setDaemon(true); audiothread.setPriority(Thread.MAX_PRIORITY); audiothread.start(); diff --git a/jdk/src/java.desktop/share/classes/com/sun/media/sound/SoftJitterCorrector.java b/jdk/src/java.desktop/share/classes/com/sun/media/sound/SoftJitterCorrector.java index 85c615e1801..f845a369e0b 100644 --- a/jdk/src/java.desktop/share/classes/com/sun/media/sound/SoftJitterCorrector.java +++ b/jdk/src/java.desktop/share/classes/com/sun/media/sound/SoftJitterCorrector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2015, 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 @@ -216,11 +216,7 @@ public final class SoftJitterCorrector extends AudioInputStream { } }; - if (System.getSecurityManager() == null) { - thread = new Thread(runnable); - } else { - thread = new ManagedLocalsThread(runnable); - } + thread = new ManagedLocalsThread(runnable); thread.setDaemon(true); thread.setPriority(Thread.MAX_PRIORITY); thread.start(); diff --git a/jdk/src/java.desktop/share/classes/com/sun/media/sound/SoftSynthesizer.java b/jdk/src/java.desktop/share/classes/com/sun/media/sound/SoftSynthesizer.java index 81c33ff788b..b888742970f 100644 --- a/jdk/src/java.desktop/share/classes/com/sun/media/sound/SoftSynthesizer.java +++ b/jdk/src/java.desktop/share/classes/com/sun/media/sound/SoftSynthesizer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2015, 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 @@ -141,11 +141,7 @@ public final class SoftSynthesizer implements AudioSynthesizer, pusher = null; jitter_stream = null; sourceDataLine = null; - if (System.getSecurityManager() == null) { - new Thread(runnable).start(); - } else { - new ManagedLocalsThread(runnable).start(); - } + new ManagedLocalsThread(runnable).start(); } return len; } diff --git a/jdk/src/java.desktop/share/classes/java/awt/EventDispatchThread.java b/jdk/src/java.desktop/share/classes/java/awt/EventDispatchThread.java index dd9ea860ec2..67b4ad852df 100644 --- a/jdk/src/java.desktop/share/classes/java/awt/EventDispatchThread.java +++ b/jdk/src/java.desktop/share/classes/java/awt/EventDispatchThread.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2015, 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 @@ -67,7 +67,7 @@ class EventDispatchThread extends ManagedLocalsThread { private ArrayList eventFilters = new ArrayList(); EventDispatchThread(ThreadGroup group, String name, EventQueue queue) { - super(group, null, name); + super(group, name); setEventQueue(queue); } diff --git a/jdk/src/java.desktop/share/classes/java/awt/image/renderable/RenderableImageProducer.java b/jdk/src/java.desktop/share/classes/java/awt/image/renderable/RenderableImageProducer.java index 4bd6c8b7396..77d0b281b43 100644 --- a/jdk/src/java.desktop/share/classes/java/awt/image/renderable/RenderableImageProducer.java +++ b/jdk/src/java.desktop/share/classes/java/awt/image/renderable/RenderableImageProducer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, 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 @@ -137,12 +137,7 @@ public class RenderableImageProducer implements ImageProducer, Runnable { addConsumer(ic); // Need to build a runnable object for the Thread. String name = "RenderableImageProducer Thread"; - Thread thread; - if (System.getSecurityManager() == null) { - thread = new Thread(this, name); - } else { - thread = new ManagedLocalsThread(this); - } + Thread thread = new ManagedLocalsThread(this, name); thread.start(); } diff --git a/jdk/src/java.desktop/share/classes/javax/swing/JTable.java b/jdk/src/java.desktop/share/classes/javax/swing/JTable.java index 3fa79bca434..3bcd70467f0 100644 --- a/jdk/src/java.desktop/share/classes/javax/swing/JTable.java +++ b/jdk/src/java.desktop/share/classes/javax/swing/JTable.java @@ -6402,12 +6402,7 @@ public class JTable extends JComponent implements TableModelListener, Scrollable }; // start printing on another thread - Thread th; - if (System.getSecurityManager() == null) { - th = new Thread(runnable); - } else { - th = new ManagedLocalsThread(runnable); - } + Thread th = new ManagedLocalsThread(runnable); th.start(); printingStatus.showModal(true); diff --git a/jdk/src/java.desktop/share/classes/javax/swing/TimerQueue.java b/jdk/src/java.desktop/share/classes/javax/swing/TimerQueue.java index c74ac7d0f6c..d221929b849 100644 --- a/jdk/src/java.desktop/share/classes/javax/swing/TimerQueue.java +++ b/jdk/src/java.desktop/share/classes/javax/swing/TimerQueue.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, 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 @@ -36,8 +36,7 @@ import java.util.concurrent.*; import java.util.concurrent.locks.*; import java.util.concurrent.atomic.AtomicLong; import sun.awt.AppContext; -import sun.misc.InnocuousThread; - +import sun.misc.ManagedLocalsThread; /** * Internal class to manage all Timers using one thread. @@ -99,12 +98,8 @@ class TimerQueue implements Runnable final ThreadGroup threadGroup = AppContext.getAppContext().getThreadGroup(); AccessController.doPrivileged((PrivilegedAction) () -> { String name = "TimerQueue"; - Thread timerThread; - if (System.getSecurityManager() == null) { - timerThread = new Thread(threadGroup, TimerQueue.this, name); - } else { - timerThread = new InnocuousThread(threadGroup, TimerQueue.this, name); - } + Thread timerThread = new ManagedLocalsThread(threadGroup, + this, name); timerThread.setDaemon(true); timerThread.setPriority(Thread.NORM_PRIORITY); timerThread.start(); diff --git a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java index b9841395f3b..d263907f742 100644 --- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java +++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java @@ -271,11 +271,7 @@ public class BasicDirectoryModel extends AbstractListModel implements Pr this.currentDirectory = currentDirectory; this.fid = fid; String name = "Basic L&F File Loading Thread"; - if (System.getSecurityManager() == null) { - this.loadThread = new Thread(this, name); - } else { - this.loadThread = new ManagedLocalsThread(this, name); - } + this.loadThread = new ManagedLocalsThread(this, name); this.loadThread.start(); } diff --git a/jdk/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java b/jdk/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java index f6ac1e60ad1..a088bb6f082 100644 --- a/jdk/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java +++ b/jdk/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java @@ -2365,11 +2365,7 @@ public abstract class JTextComponent extends JComponent implements Scrollable, A runnablePrinting.run(); } else { if (isEventDispatchThread) { - if (System.getSecurityManager() == null) { - new Thread(runnablePrinting).start(); - } else { - new ManagedLocalsThread(runnablePrinting).start(); - } + new ManagedLocalsThread(runnablePrinting).start(); printingStatus.showModal(true); } else { printingStatus.showModal(false); diff --git a/jdk/src/java.desktop/share/classes/javax/swing/text/LayoutQueue.java b/jdk/src/java.desktop/share/classes/javax/swing/text/LayoutQueue.java index 3a251030fe5..7109005c721 100644 --- a/jdk/src/java.desktop/share/classes/javax/swing/text/LayoutQueue.java +++ b/jdk/src/java.desktop/share/classes/javax/swing/text/LayoutQueue.java @@ -92,12 +92,7 @@ public class LayoutQueue { } } while (work != null); }; - String name = "text-layout"; - if (System.getSecurityManager() == null) { - worker = new Thread(workerRunnable, name); - } else { - worker = new ManagedLocalsThread(workerRunnable, name); - } + worker = new ManagedLocalsThread(workerRunnable, "text-layout"); worker.setPriority(Thread.MIN_PRIORITY); worker.start(); } diff --git a/jdk/src/java.desktop/share/classes/sun/applet/AppletClassLoader.java b/jdk/src/java.desktop/share/classes/sun/applet/AppletClassLoader.java index 721c2a07473..d83cfbd3d26 100644 --- a/jdk/src/java.desktop/share/classes/sun/applet/AppletClassLoader.java +++ b/jdk/src/java.desktop/share/classes/sun/applet/AppletClassLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2015, 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 @@ -862,7 +862,7 @@ class AppContextCreator extends ManagedLocalsThread { volatile boolean created = false; AppContextCreator(ThreadGroup group) { - super(group, null, "AppContextCreator"); + super(group, "AppContextCreator"); } public void run() { diff --git a/jdk/src/java.desktop/share/classes/sun/awt/AWTAutoShutdown.java b/jdk/src/java.desktop/share/classes/sun/awt/AWTAutoShutdown.java index fdfd17429d8..95a1fb9ddb3 100644 --- a/jdk/src/java.desktop/share/classes/sun/awt/AWTAutoShutdown.java +++ b/jdk/src/java.desktop/share/classes/sun/awt/AWTAutoShutdown.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, 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 @@ -34,7 +34,7 @@ import java.util.Map; import java.util.Set; import sun.awt.util.ThreadGroupUtils; -import sun.misc.InnocuousThread; +import sun.misc.ManagedLocalsThread; import sun.util.logging.PlatformLogger; /** @@ -336,14 +336,9 @@ public final class AWTAutoShutdown implements Runnable { */ private void activateBlockerThread() { AccessController.doPrivileged((PrivilegedAction) () -> { - Thread thread; String name = "AWT-Shutdown"; - if (System.getSecurityManager() == null) { - thread = new Thread(ThreadGroupUtils.getRootThreadGroup(), this, - name); - } else { - thread = new InnocuousThread(this, name); - } + Thread thread = new ManagedLocalsThread( + ThreadGroupUtils.getRootThreadGroup(), this, name); thread.setContextClassLoader(null); thread.setDaemon(false); blockerThread = thread; diff --git a/jdk/src/java.desktop/share/classes/sun/awt/AppContext.java b/jdk/src/java.desktop/share/classes/sun/awt/AppContext.java index 2125618d466..c6e0b02b834 100644 --- a/jdk/src/java.desktop/share/classes/sun/awt/AppContext.java +++ b/jdk/src/java.desktop/share/classes/sun/awt/AppContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, 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 @@ -44,7 +44,7 @@ import java.beans.PropertyChangeSupport; import java.beans.PropertyChangeListener; import java.lang.ref.SoftReference; -import sun.misc.InnocuousThread; +import sun.misc.ManagedLocalsThread; import sun.util.logging.PlatformLogger; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; @@ -591,13 +591,9 @@ public final class AppContext { } public Thread run() { - Thread t; - if (System.getSecurityManager() == null) { - t = new Thread(appContext.getThreadGroup(), runnable); - } else { - t = new InnocuousThread(appContext.getThreadGroup(), runnable, "AppContext Disposer"); - } - t.setContextClassLoader(null); + Thread t = new ManagedLocalsThread(appContext.getThreadGroup(), + runnable, "AppContext Disposer"); + t.setContextClassLoader(appContext.getContextClassLoader()); t.setPriority(Thread.NORM_PRIORITY + 1); t.setDaemon(true); return t; diff --git a/jdk/src/java.desktop/share/classes/sun/awt/im/InputMethodManager.java b/jdk/src/java.desktop/share/classes/sun/awt/im/InputMethodManager.java index 3747257ad69..a5000b9836d 100644 --- a/jdk/src/java.desktop/share/classes/sun/awt/im/InputMethodManager.java +++ b/jdk/src/java.desktop/share/classes/sun/awt/im/InputMethodManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2015, 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 @@ -167,12 +167,7 @@ public abstract class InputMethodManager { // to choose from. Otherwise, just keep the instance. if (imm.hasMultipleInputMethods()) { imm.initialize(); - Thread immThread; - if (System.getSecurityManager() == null) { - immThread = new Thread(imm, threadName); - } else { - immThread = new ManagedLocalsThread(imm, threadName); - } + Thread immThread = new ManagedLocalsThread(imm, threadName); immThread.setDaemon(true); immThread.setPriority(Thread.NORM_PRIORITY + 1); immThread.start(); diff --git a/jdk/src/java.desktop/share/classes/sun/awt/image/ImageFetcher.java b/jdk/src/java.desktop/share/classes/sun/awt/image/ImageFetcher.java index 9e71c9d47c2..4ad7eea1682 100644 --- a/jdk/src/java.desktop/share/classes/sun/awt/image/ImageFetcher.java +++ b/jdk/src/java.desktop/share/classes/sun/awt/image/ImageFetcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2015, 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 @@ -55,7 +55,7 @@ class ImageFetcher extends ManagedLocalsThread { * Constructor for ImageFetcher -- only called by add() below. */ private ImageFetcher(ThreadGroup threadGroup, int index) { - super(threadGroup, null, "Image Fetcher " + index); + super(threadGroup, "Image Fetcher " + index); setDaemon(true); } diff --git a/jdk/src/java.desktop/share/classes/sun/font/CreatedFontTracker.java b/jdk/src/java.desktop/share/classes/sun/font/CreatedFontTracker.java index 439a30aa575..0ce75a7b235 100644 --- a/jdk/src/java.desktop/share/classes/sun/font/CreatedFontTracker.java +++ b/jdk/src/java.desktop/share/classes/sun/font/CreatedFontTracker.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2015, 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 @@ -36,7 +36,7 @@ import java.util.concurrent.TimeUnit; import sun.awt.AppContext; import sun.awt.util.ThreadGroupUtils; -import sun.misc.InnocuousThread; +import sun.misc.ManagedLocalsThread; public class CreatedFontTracker { @@ -117,17 +117,13 @@ public class CreatedFontTracker { if (t == null) { // Add a shutdown hook to remove the temp file. AccessController.doPrivileged((PrivilegedAction) () -> { - if (System.getSecurityManager() == null) { - /* The thread must be a member of a thread group - * which will not get GCed before VM exit. - * Make its parent the top-level thread group. - */ - ThreadGroup rootTG = ThreadGroupUtils.getRootThreadGroup(); - t = new Thread(rootTG, TempFileDeletionHook::runHooks); - } else { - /* InnocuousThread is a member of a correct TG by default */ - t = new InnocuousThread(TempFileDeletionHook::runHooks); - } + /* The thread must be a member of a thread group + * which will not get GCed before VM exit. + * Make its parent the top-level thread group. + */ + ThreadGroup rootTG = ThreadGroupUtils.getRootThreadGroup(); + t = new ManagedLocalsThread(rootTG, + TempFileDeletionHook::runHooks); /* Set context class loader to null in order to avoid * keeping a strong reference to an application classloader. */ diff --git a/jdk/src/java.desktop/share/classes/sun/font/SunFontManager.java b/jdk/src/java.desktop/share/classes/sun/font/SunFontManager.java index 1c787d161e5..41e383df5bd 100644 --- a/jdk/src/java.desktop/share/classes/sun/font/SunFontManager.java +++ b/jdk/src/java.desktop/share/classes/sun/font/SunFontManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2015, 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 @@ -55,6 +55,7 @@ import sun.awt.SunToolkit; import sun.awt.util.ThreadGroupUtils; import sun.java2d.FontSupport; import sun.misc.InnocuousThread; +import sun.misc.ManagedLocalsThread; import sun.util.logging.PlatformLogger; /** @@ -2501,12 +2502,9 @@ public abstract class SunFontManager implements FontSupport, FontManagerForSGE { } }; AccessController.doPrivileged((PrivilegedAction) () -> { - if (System.getSecurityManager() == null) { - ThreadGroup rootTG = ThreadGroupUtils.getRootThreadGroup(); - fileCloser = new Thread(rootTG, fileCloserRunnable); - } else { - fileCloser = new InnocuousThread(fileCloserRunnable); - } + ThreadGroup rootTG = ThreadGroupUtils.getRootThreadGroup(); + fileCloser = new ManagedLocalsThread(rootTG, + fileCloserRunnable); fileCloser.setContextClassLoader(null); Runtime.getRuntime().addShutdownHook(fileCloser); return null; diff --git a/jdk/src/java.desktop/share/classes/sun/java2d/Disposer.java b/jdk/src/java.desktop/share/classes/sun/java2d/Disposer.java index a3fd6143a77..0eee93fbac9 100644 --- a/jdk/src/java.desktop/share/classes/sun/java2d/Disposer.java +++ b/jdk/src/java.desktop/share/classes/sun/java2d/Disposer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2015, 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 @@ -26,7 +26,7 @@ package sun.java2d; import sun.awt.util.ThreadGroupUtils; -import sun.misc.InnocuousThread; +import sun.misc.ManagedLocalsThread; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; @@ -84,13 +84,8 @@ public class Disposer implements Runnable { disposerInstance = new Disposer(); AccessController.doPrivileged((PrivilegedAction) () -> { String name = "Java2D Disposer"; - Thread t; - if (System.getSecurityManager() == null) { - ThreadGroup rootTG = ThreadGroupUtils.getRootThreadGroup(); - t = new Thread(rootTG, disposerInstance, name); - } else { - t = new InnocuousThread(disposerInstance, name); - } + ThreadGroup rootTG = ThreadGroupUtils.getRootThreadGroup(); + Thread t = new ManagedLocalsThread(rootTG, disposerInstance, name); t.setContextClassLoader(null); t.setDaemon(true); t.setPriority(Thread.MAX_PRIORITY); diff --git a/jdk/src/java.desktop/share/classes/sun/java2d/loops/GraphicsPrimitive.java b/jdk/src/java.desktop/share/classes/sun/java2d/loops/GraphicsPrimitive.java index e7d2e2448f6..6db75f45f52 100644 --- a/jdk/src/java.desktop/share/classes/sun/java2d/loops/GraphicsPrimitive.java +++ b/jdk/src/java.desktop/share/classes/sun/java2d/loops/GraphicsPrimitive.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, 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 @@ -48,7 +48,7 @@ import java.io.FileNotFoundException; import java.security.AccessController; import java.security.PrivilegedAction; -import sun.misc.InnocuousThread; +import sun.misc.ManagedLocalsThread; import sun.security.action.GetPropertyAction; /** @@ -420,12 +420,8 @@ public abstract class GraphicsPrimitive { public static void setShutdownHook() { AccessController.doPrivileged((PrivilegedAction) () -> { TraceReporter t = new TraceReporter(); - Thread thread; - if (System.getSecurityManager() == null) { - thread = new Thread(ThreadGroupUtils.getRootThreadGroup(), t); - } else { - thread = new InnocuousThread(t); - } + Thread thread = new ManagedLocalsThread( + ThreadGroupUtils.getRootThreadGroup(), t); thread.setContextClassLoader(null); Runtime.getRuntime().addShutdownHook(thread); return null; diff --git a/jdk/src/java.desktop/share/classes/sun/java2d/opengl/OGLRenderQueue.java b/jdk/src/java.desktop/share/classes/sun/java2d/opengl/OGLRenderQueue.java index 9e45eb3d7a1..e93bab4f568 100644 --- a/jdk/src/java.desktop/share/classes/sun/java2d/opengl/OGLRenderQueue.java +++ b/jdk/src/java.desktop/share/classes/sun/java2d/opengl/OGLRenderQueue.java @@ -29,6 +29,7 @@ import sun.awt.util.ThreadGroupUtils; import sun.java2d.pipe.RenderBuffer; import sun.java2d.pipe.RenderQueue; import sun.misc.InnocuousThread; +import sun.misc.ManagedLocalsThread; import static sun.java2d.pipe.BufferedOpCodes.*; import java.security.AccessController; @@ -161,11 +162,7 @@ public class OGLRenderQueue extends RenderQueue { public QueueFlusher() { String name = "Java2D Queue Flusher"; - if (System.getSecurityManager() == null) { - this.thread = new Thread(ThreadGroupUtils.getRootThreadGroup(), this, name); - } else { - this.thread = new InnocuousThread(this, name); - } + thread = new ManagedLocalsThread(ThreadGroupUtils.getRootThreadGroup(), this, name); thread.setDaemon(true); thread.setPriority(Thread.MAX_PRIORITY); thread.start(); diff --git a/jdk/src/java.desktop/share/classes/sun/print/PrintJob2D.java b/jdk/src/java.desktop/share/classes/sun/print/PrintJob2D.java index 0ae31dfb56e..cd3ded43f75 100644 --- a/jdk/src/java.desktop/share/classes/sun/print/PrintJob2D.java +++ b/jdk/src/java.desktop/share/classes/sun/print/PrintJob2D.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, 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 @@ -987,12 +987,7 @@ public class PrintJob2D extends PrintJob implements Printable, Runnable { } private void startPrinterJobThread() { - String name = "printerJobThread"; - if (System.getSecurityManager() == null) { - printerJobThread = new Thread(this, name); - } else { - printerJobThread = new ManagedLocalsThread(this, name); - } + printerJobThread = new ManagedLocalsThread(this, "printerJobThread"); printerJobThread.start(); } diff --git a/jdk/src/java.desktop/share/classes/sun/print/ServiceNotifier.java b/jdk/src/java.desktop/share/classes/sun/print/ServiceNotifier.java index 5172acaa58b..573684a6048 100644 --- a/jdk/src/java.desktop/share/classes/sun/print/ServiceNotifier.java +++ b/jdk/src/java.desktop/share/classes/sun/print/ServiceNotifier.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, 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 @@ -50,7 +50,7 @@ class ServiceNotifier extends ManagedLocalsThread { private PrintServiceAttributeSet lastSet; ServiceNotifier(PrintService service) { - super((Runnable) null, service.getName() + " notifier"); + super(service.getName() + " notifier"); this.service = service; listeners = new Vector<>(); try { diff --git a/jdk/src/java.desktop/unix/classes/sun/awt/X11/GtkFileDialogPeer.java b/jdk/src/java.desktop/unix/classes/sun/awt/X11/GtkFileDialogPeer.java index 8c0dc54a3b8..db2f2dcfa5b 100644 --- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/GtkFileDialogPeer.java +++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/GtkFileDialogPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2015, 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 @@ -116,12 +116,7 @@ final class GtkFileDialogPeer extends XDialogPeer implements FileDialogPeer { showNativeDialog(); fd.setVisible(false); }; - if (System.getSecurityManager() == null) { - new Thread(task).start(); - } else { - new ManagedLocalsThread(task).start(); - } - + new ManagedLocalsThread(task).start(); } else { quit(); fd.setVisible(false); diff --git a/jdk/src/java.desktop/unix/classes/sun/awt/X11/InfoWindow.java b/jdk/src/java.desktop/unix/classes/sun/awt/X11/InfoWindow.java index 33cc44fccec..27661ee35d7 100644 --- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/InfoWindow.java +++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/InfoWindow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2015, 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 @@ -29,7 +29,6 @@ import java.awt.*; import java.awt.event.*; import java.awt.peer.TrayIconPeer; import sun.awt.*; -import sun.misc.InnocuousThread; import sun.misc.ManagedLocalsThread; import java.awt.image.*; @@ -455,11 +454,7 @@ public abstract class InfoWindow extends Window { final Thread thread; Displayer() { - if (System.getSecurityManager() == null) { - this.thread = new Thread(this); - } else { - this.thread = new ManagedLocalsThread(this); - } + this.thread = new ManagedLocalsThread(this); this.thread.setDaemon(true); } diff --git a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java index 3f95f42611a..1b890710594 100644 --- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java +++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java @@ -281,12 +281,8 @@ public final class XToolkit extends UNIXToolkit implements Runnable { } }; String name = "XToolkt-Shutdown-Thread"; - Thread shutdownThread; - if (System.getSecurityManager() == null) { - shutdownThread = new Thread(ThreadGroupUtils.getRootThreadGroup(), r, name); - } else { - shutdownThread = new InnocuousThread(r, name); - } + Thread shutdownThread = new ManagedLocalsThread( + ThreadGroupUtils.getRootThreadGroup(), r, name); shutdownThread.setContextClassLoader(null); Runtime.getRuntime().addShutdownHook(shutdownThread); return null; @@ -333,12 +329,8 @@ public final class XToolkit extends UNIXToolkit implements Runnable { toolkitThread = AccessController.doPrivileged((PrivilegedAction) () -> { String name = "AWT-XAWT"; - Thread thread; - if (System.getSecurityManager() == null) { - thread = new Thread(ThreadGroupUtils.getRootThreadGroup(), XToolkit.this, name); - } else { - thread = new InnocuousThread(XToolkit.this, name); - } + Thread thread = new ManagedLocalsThread( + ThreadGroupUtils.getRootThreadGroup(), this, name); thread.setContextClassLoader(null); thread.setPriority(Thread.NORM_PRIORITY + 1); thread.setDaemon(true); diff --git a/jdk/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java b/jdk/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java index c6b9cc94044..f24df1fd216 100644 --- a/jdk/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java +++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java @@ -43,7 +43,7 @@ import sun.java2d.xr.XRGraphicsConfig; import sun.java2d.loops.SurfaceType; import sun.awt.util.ThreadGroupUtils; -import sun.misc.InnocuousThread; +import sun.misc.ManagedLocalsThread; /** * This is an implementation of a GraphicsDevice object for a single @@ -437,12 +437,8 @@ public final class X11GraphicsDevice extends GraphicsDevice } }; String name = "Display-Change-Shutdown-Thread-" + screen; - Thread t; - if (System.getSecurityManager() == null) { - t = new Thread(ThreadGroupUtils.getRootThreadGroup(), r, name); - } else { - t = new InnocuousThread(r, name); - } + Thread t = new ManagedLocalsThread( + ThreadGroupUtils.getRootThreadGroup(), r, name); t.setContextClassLoader(null); Runtime.getRuntime().addShutdownHook(t); return null; diff --git a/jdk/src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java b/jdk/src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java index e40ba274b46..7cf6bf0aced 100644 --- a/jdk/src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java +++ b/jdk/src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, 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 @@ -213,12 +213,7 @@ public class PrintServiceLookupProvider extends PrintServiceLookup public PrintServiceLookupProvider() { // start the printer listener thread if (pollServices) { - Thread thr; - if (System.getSecurityManager() == null) { - thr = new Thread(new PrinterChangeListener()); - } else { - thr = new ManagedLocalsThread(new PrinterChangeListener()); - } + Thread thr = new ManagedLocalsThread(new PrinterChangeListener()); thr.setDaemon(true); thr.start(); IPPPrintService.debug_println(debugPrefix+"polling turned on"); diff --git a/jdk/src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java b/jdk/src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java index 4817e2a62bc..e87379a58f0 100644 --- a/jdk/src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java +++ b/jdk/src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java @@ -41,8 +41,7 @@ import java.util.stream.Stream; import static sun.awt.shell.Win32ShellFolder2.*; import sun.awt.OSInfo; import sun.awt.util.ThreadGroupUtils; -import sun.misc.InnocuousThread; - +import sun.misc.ManagedLocalsThread; // NOTE: This class supersedes Win32ShellFolderManager, which was removed // from distribution after version 1.4.2. @@ -525,12 +524,8 @@ final class Win32ShellFolderManager2 extends ShellFolderManager { return null; }); AccessController.doPrivileged((PrivilegedAction) () -> { - Thread t; - if (System.getSecurityManager() == null) { - t = new Thread(ThreadGroupUtils.getRootThreadGroup(), shutdownHook); - } else { - t = new InnocuousThread(shutdownHook); - } + Thread t = new ManagedLocalsThread( + ThreadGroupUtils.getRootThreadGroup(), shutdownHook); Runtime.getRuntime().addShutdownHook(t); return null; }); @@ -549,17 +544,12 @@ final class Win32ShellFolderManager2 extends ShellFolderManager { }; comThread = AccessController.doPrivileged((PrivilegedAction) () -> { String name = "Swing-Shell"; - Thread thread; - if (System.getSecurityManager() == null) { - /* The thread must be a member of a thread group - * which will not get GCed before VM exit. - * Make its parent the top-level thread group. - */ - thread = new Thread(ThreadGroupUtils.getRootThreadGroup(), comRun, name); - } else { - /* InnocuousThread is a member of a correct TG by default */ - thread = new InnocuousThread(comRun, name); - } + /* The thread must be a member of a thread group + * which will not get GCed before VM exit. + * Make its parent the top-level thread group. + */ + Thread thread = new ManagedLocalsThread( + ThreadGroupUtils.getRootThreadGroup(), comRun, name); thread.setDaemon(true); return thread; }); diff --git a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WFileDialogPeer.java b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WFileDialogPeer.java index 4050668c65a..e75f3b9f486 100644 --- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WFileDialogPeer.java +++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WFileDialogPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2015, 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 @@ -98,11 +98,7 @@ final class WFileDialogPeer extends WWindowPeer implements FileDialogPeer { @Override public void show() { - if (System.getSecurityManager() == null) { - new Thread(this::_show).start(); - } else { - new ManagedLocalsThread(this::_show).start(); - } + new ManagedLocalsThread(this::_show).start(); } @Override diff --git a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPageDialogPeer.java b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPageDialogPeer.java index 7a146d965cd..10d99948b10 100644 --- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPageDialogPeer.java +++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPageDialogPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, 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 @@ -53,10 +53,6 @@ final class WPageDialogPeer extends WPrintDialogPeer { } ((WPrintDialog)target).setVisible(false); }; - if (System.getSecurityManager() == null) { - new Thread(runnable).start(); - } else { - new ManagedLocalsThread(runnable).start(); - } + new ManagedLocalsThread(runnable).start(); } } diff --git a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialogPeer.java b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialogPeer.java index de4abab4fa3..99c727493d1 100644 --- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialogPeer.java +++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialogPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2015, 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 @@ -78,11 +78,7 @@ class WPrintDialogPeer extends WWindowPeer implements DialogPeer { } ((WPrintDialog)target).setVisible(false); }; - if (System.getSecurityManager() == null) { - new Thread(runnable).start(); - } else { - new ManagedLocalsThread(runnable).start(); - } + new ManagedLocalsThread(runnable).start(); } synchronized void setHWnd(long hwnd) { diff --git a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WToolkit.java b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WToolkit.java index 02d8f49aba1..e4e6675acde 100644 --- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WToolkit.java +++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WToolkit.java @@ -51,7 +51,7 @@ import sun.awt.datatransfer.DataTransferer; import sun.java2d.d3d.D3DRenderQueue; import sun.java2d.opengl.OGLRenderQueue; -import sun.misc.InnocuousThread; +import sun.misc.ManagedLocalsThread; import sun.print.PrintJob2D; import java.awt.dnd.DragSource; @@ -255,12 +255,7 @@ public final class WToolkit extends SunToolkit implements Runnable { (PrivilegedAction) ThreadGroupUtils::getRootThreadGroup); if (!startToolkitThread(this, rootTG)) { String name = "AWT-Windows"; - Thread toolkitThread; - if (System.getSecurityManager() == null) { - toolkitThread = new Thread(rootTG, this, name); - } else { - toolkitThread = new InnocuousThread(this, name); - } + Thread toolkitThread = new ManagedLocalsThread(rootTG, this, name); toolkitThread.setDaemon(true); toolkitThread.start(); } @@ -287,16 +282,12 @@ public final class WToolkit extends SunToolkit implements Runnable { private void registerShutdownHook() { AccessController.doPrivileged((PrivilegedAction) () -> { - Thread shutdown; - if (System.getSecurityManager() == null) { - shutdown = new Thread(ThreadGroupUtils.getRootThreadGroup(), this::shutdown); - } else { - shutdown = new InnocuousThread(this::shutdown); - } + Thread shutdown = new ManagedLocalsThread( + ThreadGroupUtils.getRootThreadGroup(), this::shutdown); shutdown.setContextClassLoader(null); Runtime.getRuntime().addShutdownHook(shutdown); return null; - }); + }); } @Override diff --git a/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java b/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java index e4ebb4b9cd8..60bdc361d6c 100644 --- a/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java +++ b/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java @@ -49,7 +49,7 @@ import sun.java2d.SurfaceData; import sun.java2d.windows.GDIWindowSurfaceData; import sun.java2d.d3d.D3DSurfaceData.D3DWindowSurfaceData; import sun.java2d.windows.WindowsFlags; -import sun.misc.InnocuousThread; +import sun.misc.ManagedLocalsThread; /** * This class handles rendering to the screen with the D3D pipeline. @@ -99,12 +99,8 @@ public class D3DScreenUpdateManager extends ScreenUpdateManager done = true; wakeUpUpdateThread(); }; - Thread shutdown; - if (System.getSecurityManager() == null) { - shutdown = new Thread(ThreadGroupUtils.getRootThreadGroup(), shutdownRunnable); - } else { - shutdown = new InnocuousThread(shutdownRunnable); - } + Thread shutdown = new ManagedLocalsThread( + ThreadGroupUtils.getRootThreadGroup(), shutdownRunnable); shutdown.setContextClassLoader(null); try { Runtime.getRuntime().addShutdownHook(shutdown); @@ -351,15 +347,9 @@ public class D3DScreenUpdateManager extends ScreenUpdateManager private synchronized void startUpdateThread() { if (screenUpdater == null) { screenUpdater = AccessController.doPrivileged((PrivilegedAction) () -> { - Thread t; String name = "D3D Screen Updater"; - if (System.getSecurityManager() == null) { - t = new Thread(ThreadGroupUtils.getRootThreadGroup(), - D3DScreenUpdateManager.this, - name); - } else { - t = new InnocuousThread(D3DScreenUpdateManager.this, name); - } + Thread t = new ManagedLocalsThread( + ThreadGroupUtils.getRootThreadGroup(), this, name); // REMIND: should it be higher? t.setPriority(Thread.NORM_PRIORITY + 2); t.setDaemon(true); diff --git a/jdk/src/java.desktop/windows/classes/sun/print/PrintServiceLookupProvider.java b/jdk/src/java.desktop/windows/classes/sun/print/PrintServiceLookupProvider.java index 903673efdbf..e9139b46525 100644 --- a/jdk/src/java.desktop/windows/classes/sun/print/PrintServiceLookupProvider.java +++ b/jdk/src/java.desktop/windows/classes/sun/print/PrintServiceLookupProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, 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 @@ -99,12 +99,7 @@ public class PrintServiceLookupProvider extends PrintServiceLookup { return; } // start the printer listener thread - Thread thr; - if (System.getSecurityManager() == null) { - thr = new Thread(new PrinterChangeListener()); - } else { - thr = new ManagedLocalsThread(new PrinterChangeListener()); - } + Thread thr = new ManagedLocalsThread(new PrinterChangeListener()); thr.setDaemon(true); thr.start(); } /* else condition ought to never happen! */ diff --git a/jdk/test/java/awt/EventDispatchThread/PropertyPermissionOnEDT/PropertyPermissionOnEDT.java b/jdk/test/java/awt/EventDispatchThread/PropertyPermissionOnEDT/PropertyPermissionOnEDT.java new file mode 100644 index 00000000000..ef0e009ac5e --- /dev/null +++ b/jdk/test/java/awt/EventDispatchThread/PropertyPermissionOnEDT/PropertyPermissionOnEDT.java @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2015, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.Point; +import java.awt.Robot; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.awt.event.InputEvent; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; + +import javax.swing.JFrame; +import javax.swing.SwingUtilities; + +/** + * @test + * @bug 8080405 + * @run main/othervm/policy=java.policy -Djava.security.manager PropertyPermissionOnEDT + */ +public final class PropertyPermissionOnEDT { + + public static void main(final String[] args) throws Exception { + SwingUtilities.invokeAndWait(PropertyPermissionOnEDT::test); + + JFrame frame = new JFrame(); + frame.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(final MouseEvent e) { + test(); + } + + @Override + public void mousePressed(MouseEvent e) { + test(); + } + + @Override + public void mouseReleased(MouseEvent e) { + test(); + } + + @Override + public void mouseEntered(MouseEvent e) { + test(); + } + + @Override + public void mouseExited(MouseEvent e) { + test(); + } + }); + frame.addFocusListener(new FocusListener() { + @Override + public void focusGained(FocusEvent e) { + test(); + } + + @Override + public void focusLost(FocusEvent e) { + test(); + } + }); + frame.addMouseWheelListener(e -> test()); + frame.addWindowStateListener(e -> test()); + + frame.setSize(100, 100); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + Robot robot = new Robot(); + robot.setAutoWaitForIdle(true); + robot.setAutoDelay(100); + Point loc = frame.getLocationOnScreen(); + robot.mouseMove(loc.x + frame.getWidth() / 2, + loc.y + frame.getHeight() / 2); + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + robot.mouseWheel(100); + frame.dispose(); + } + + private static void test() { + String property = System.getProperty("os.name"); + System.out.println("property = " + property); + } +} diff --git a/jdk/test/java/awt/EventDispatchThread/PropertyPermissionOnEDT/java.policy b/jdk/test/java/awt/EventDispatchThread/PropertyPermissionOnEDT/java.policy new file mode 100644 index 00000000000..461664148ba --- /dev/null +++ b/jdk/test/java/awt/EventDispatchThread/PropertyPermissionOnEDT/java.policy @@ -0,0 +1,4 @@ +grant { + permission java.util.PropertyPermission "os.name", "read"; + permission java.awt.AWTPermission "createRobot"; +};