This is an automated email from the ASF dual-hosted git repository.

bwalker pushed a commit to branch cleanup_threadgroup_method_usage
in repository https://gitbox.apache.org/repos/asf/netbeans.git

commit 0cf9d33cd01d23b9c9cc86859b95185d2c5f8c66
Author: Brad Walker <[email protected]>
AuthorDate: Wed Dec 17 18:14:29 2025 -0700

    cleanup: remove deprecated TheadGroup methods
    
    desc: The ThreadGroup class is an artificate of by-gone days. The ability 
to destroy a thread group and the concept of a destroyed thread group no longer 
exists. Several of the methods are null functions as well as marked for 
removal. This cleans up the usage of these methods.
---
 .../netbeans/core/execution/DefaultSysProcess.java | 31 ----------------------
 .../netbeans/core/execution/ExecutionEngine.java   | 31 +++++++++++-----------
 .../src/org/openide/util/RequestProcessor.java     |  6 -----
 3 files changed, 16 insertions(+), 52 deletions(-)

diff --git 
a/platform/core.execution/src/org/netbeans/core/execution/DefaultSysProcess.java
 
b/platform/core.execution/src/org/netbeans/core/execution/DefaultSysProcess.java
index 6d2b6c3d450..d11e169bdd0 100644
--- 
a/platform/core.execution/src/org/netbeans/core/execution/DefaultSysProcess.java
+++ 
b/platform/core.execution/src/org/netbeans/core/execution/DefaultSysProcess.java
@@ -101,35 +101,4 @@ final class DefaultSysProcess extends ExecutorTask {
     public String getName() {
         return name;
     }
-    
-    /** destroy the thread group this process was handled from. Not that simple
-     * as it seems, since the ThreadGroup can't be destroyed from inside.
-     */
-    void destroyThreadGroup(ThreadGroup base) {
-        new Thread(base, new Destroyer(group)).start();
-    }
-    private static class Destroyer implements Runnable {
-        private final ThreadGroup group;
-        Destroyer(ThreadGroup group) {
-            this.group = group;
-        }
-        @Override public void run() {
-            try {
-                while (group.activeCount() > 0) {
-                    Thread.sleep(1000);
-                }
-            }
-            catch (InterruptedException e) {
-                Exceptions.printStackTrace(e);
-            }
-            if (!group.isDestroyed()) {
-                try {
-                    group.destroy();
-                } catch (IllegalThreadStateException x) {
-                    // #165302: destroyed some other way?
-                }
-            }
-        }
-    }
-
 }
diff --git 
a/platform/core.execution/src/org/netbeans/core/execution/ExecutionEngine.java 
b/platform/core.execution/src/org/netbeans/core/execution/ExecutionEngine.java
index 3ae04281f63..9fbec8948fa 100644
--- 
a/platform/core.execution/src/org/netbeans/core/execution/ExecutionEngine.java
+++ 
b/platform/core.execution/src/org/netbeans/core/execution/ExecutionEngine.java
@@ -71,9 +71,9 @@ public final class
 
     /* table of window:threadgrp */
     private static final WindowTable wtable = new WindowTable();
-
+    
     /** list of ExecutionListeners */
-    private final HashSet<ExecutionListener> executionListeners = new 
HashSet<>();
+    private final Set<ExecutionListener> executionListeners;
 
     /** List of running executions */
     private final List<ExecutorTask> runningTasks = 
Collections.synchronizedList(new ArrayList<>(5));
@@ -87,6 +87,8 @@ public final class
     static final long serialVersionUID =9072488605180080803L;
 
     public ExecutionEngine () {
+        this.executionListeners = Collections.synchronizedSet(new HashSet<>());
+        
         /* SysIn is a class that redirects System.in of some running task to
            a window (probably OutWindow).
            SysOut/Err are classes that redirect out/err to the window
@@ -134,7 +136,6 @@ public final class
     @Override
     public ExecutorTask execute(String name, Runnable run, final InputOutput 
inout) {
         TaskThreadGroup g = new TaskThreadGroup(base, "exec_" + name + "_" + 
number); // NOI18N
-        g.setDaemon(true);
         ExecutorTaskImpl task = new ExecutorTaskImpl();
         synchronized (task.lock) {
             try {
@@ -193,24 +194,25 @@ public final class
     /** fires event that notifies about new process */
     protected final void fireExecutionStarted (ExecutionEvent ev) {
         runningTasks.add( ev.getProcess() );
-       @SuppressWarnings("unchecked") 
-        Iterator<ExecutionListener> iter = ((HashSet<ExecutionListener>) 
executionListeners.clone()).iterator();
-        while (iter.hasNext()) {
-            ExecutionListener l = iter.next();
-            l.startedExecution(ev);
+        synchronized (executionListeners) {
+            Iterator<ExecutionListener> iter = executionListeners.iterator();
+            while (iter.hasNext()) {
+                ExecutionListener l = iter.next();
+                l.startedExecution(ev);
+            }
         }
     }
 
     /** fires event that notifies about the end of a process */
     protected final void fireExecutionFinished (ExecutionEvent ev) {
         runningTasks.remove( ev.getProcess() );
-       @SuppressWarnings("unchecked") 
-        Iterator<ExecutionListener> iter = ((HashSet<ExecutionListener>) 
executionListeners.clone()).iterator();
-        while (iter.hasNext()) {
-            ExecutionListener l = iter.next();
-            l.finishedExecution(ev);
+        synchronized (executionListeners) {
+            Iterator<ExecutionListener> iter = executionListeners.iterator();
+            while (iter.hasNext()) {
+                ExecutionListener l = iter.next();
+                l.finishedExecution(ev);
+            }
         }
-        ev.getProcess().destroyThreadGroup(base);
     }
 
     static void putWindow(java.awt.Window w, TaskThreadGroup tg) {
@@ -296,5 +298,4 @@ public final class
     static PrintStream createPrintStream(boolean stdOut) {
         return new WriterPrintStream(new SysOut(stdOut), stdOut);
     }
-   
 }
diff --git a/platform/openide.util/src/org/openide/util/RequestProcessor.java 
b/platform/openide.util/src/org/openide/util/RequestProcessor.java
index eb91719c57b..d1f8e2ee400 100644
--- a/platform/openide.util/src/org/openide/util/RequestProcessor.java
+++ b/platform/openide.util/src/org/openide/util/RequestProcessor.java
@@ -1892,20 +1892,14 @@ outer:  do {
                             return proc;
                         }
                     } else {
-                        assert checkAccess(TOP_GROUP.getTopLevelThreadGroup());
                         Processor proc = POOL.pop();
                         proc.idle = false;
-
                         return proc;
                     }
                 }
                 newP = new Processor();
             }
         }
-        private static boolean checkAccess(ThreadGroup g) throws 
SecurityException {
-            g.checkAccess();
-            return true;
-        }
 
         /** A way of returning a Processor to the inactive pool.
          *


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to