< prev index next >

modules/web/src/main/java/com/sun/webkit/Disposer.java

Print this page
rev 9728 : 8139317: [Mac] SecurityException when constructing WebView from JFXPanel application
Reviewed-by:

@@ -30,10 +30,11 @@
 
 package com.sun.webkit;
 
 import java.lang.ref.ReferenceQueue;
 import java.lang.ref.WeakReference;
+import java.security.PrivilegedAction;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 import java.util.concurrent.LinkedBlockingQueue;

@@ -56,14 +57,27 @@
     private static final Disposer disposerInstance = new Disposer();
     private static final Set<WeakDisposerRecord> records =
             new HashSet<WeakDisposerRecord>();
 
     static {
-        Thread t = new Thread(disposerInstance, "Disposer");
+        java.security.AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
+            /*
+             * 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 = Thread.currentThread().getThreadGroup();
+            for (ThreadGroup tgn = tg;
+                    tgn != null;
+                    tg = tgn, tgn = tg.getParent());
+
+            Thread t = new Thread(tg, disposerInstance, "Disposer");
         t.setDaemon(true);
         t.setPriority(Thread.MAX_PRIORITY);
         t.start();
+            return null;
+        });
     }
 
     /**
      * Registers the object and the native data for later disposal.
      * @param target Object to be registered
< prev index next >