On 08/12/2023 10:29, ma...@apache.org wrote:
This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/10.1.x by this push:
      new 2b3f0f0964 Improvements to French translations. (remm)
2b3f0f0964 is described below

commit 2b3f0f09641e0d8504a114cf296a18d66039266b
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Fri Dec 8 10:26:49 2023 +0000

     Improvements to French translations. (remm)

Execute the nonsense commit message. Eclipse was being "helpful" and I missed it.

Mark

---
  .../tomcat/util/threads/LocalStrings.properties    |  2 +
  .../tomcat/util/threads/VirtualThreadExecutor.java | 62 +++++++++++++++++++++-
  webapps/docs/changelog.xml                         | 11 ++++
  3 files changed, 73 insertions(+), 2 deletions(-)

diff --git a/java/org/apache/tomcat/util/threads/LocalStrings.properties 
b/java/org/apache/tomcat/util/threads/LocalStrings.properties
index 4b28c96f84..e6999e19e4 100644
--- a/java/org/apache/tomcat/util/threads/LocalStrings.properties
+++ b/java/org/apache/tomcat/util/threads/LocalStrings.properties
@@ -19,3 +19,5 @@ threadPoolExecutor.invalidKeepAlive=Core threads must have 
positive keep alive t
  threadPoolExecutor.queueFull=Queue capacity is full
  threadPoolExecutor.taskRejected=Task [{0}] rejected from [{1}]
  threadPoolExecutor.threadStoppedToAvoidPotentialLeak=Stopping thread [{0}] to 
avoid potential memory leaks after a context was stopped.
+
+vvirtualThreadExecutor.taskRejected=Task [{0}] rejected from [{1}]
\ No newline at end of file
diff --git a/java/org/apache/tomcat/util/threads/VirtualThreadExecutor.java 
b/java/org/apache/tomcat/util/threads/VirtualThreadExecutor.java
index 93a00f8d42..01dc547d96 100644
--- a/java/org/apache/tomcat/util/threads/VirtualThreadExecutor.java
+++ b/java/org/apache/tomcat/util/threads/VirtualThreadExecutor.java
@@ -16,14 +16,24 @@
   */
  package org.apache.tomcat.util.threads;
-import java.util.concurrent.Executor;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.AbstractExecutorService;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.TimeUnit;
import org.apache.tomcat.util.compat.JreCompat;
+import org.apache.tomcat.util.res.StringManager;
/**
   * An executor that uses a new virtual thread for each task.
   */
-public class VirtualThreadExecutor implements Executor {
+public class VirtualThreadExecutor extends AbstractExecutorService {
+
+    private static final StringManager sm = 
StringManager.getManager(VirtualThreadExecutor.class);
+
+    private CountDownLatch shutdown = new CountDownLatch(1);
private final JreCompat jreCompat = JreCompat.getInstance(); @@ -35,6 +45,54 @@ public class VirtualThreadExecutor implements Executor { @Override
      public void execute(Runnable command) {
+        if (isShutdown()) {
+            throw new RejectedExecutionException(
+                    sm.getString("virtualThreadExecutor.taskRejected", 
command.toString(), this.toString()));
+        }
          jreCompat.threadBuilderStart(threadBuilder, command);
      }
+
+    @Override
+    public void shutdown() {
+        shutdown.countDown();
+    }
+
+    /**
+     * {@inheritDoc}
+     * <p>
+     * The VirtualThreadExecutor does not track in-progress tasks so calling 
this method is equivalent to calling
+     * {@link #shutdown()}.
+     */
+    @Override
+    public List<Runnable> shutdownNow() {
+        shutdown();
+        return Collections.emptyList();
+    }
+
+    @Override
+    public boolean isShutdown() {
+        return shutdown.getCount() == 0;
+    }
+
+    /**
+     * {@inheritDoc}
+     * <p>
+     * The VirtualThreadExecutor does not track in-progress tasks so calling 
this method is equivalent to calling
+     * {@link #isShutdown()}.
+     */
+    @Override
+    public boolean isTerminated() {
+        return isShutdown();
+    }
+
+    /**
+     * {@inheritDoc}
+     * <p>
+     * The VirtualThreadExecutor does not track in-progress tasks so calling 
this method is effectively waiting for
+     * {@link #shutdown()} to be called.
+     */
+    @Override
+    public boolean awaitTermination(long timeout, TimeUnit unit) throws 
InterruptedException {
+        return shutdown.await(timeout, unit);
+    }
  }
\ No newline at end of file
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 01c72ce5eb..5a228d27a7 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -104,6 +104,17 @@
    They eventually become mixed with the numbered issues (i.e., numbered
    issues do not "pop up" wrt. others).
  -->
+<section name="Tomcat 10.1.18 (schultz)" rtext="in development">
+  <subsection name="Coyote">
+    <changelog>
+      <fix>
+        Refactor the <code>VirtualThreadExecutor</code> so that it can be used
+        by the NIO2 connector which was using platform threads even when
+        configured to use virtual threads. (markt)
+      </fix>
+    </changelog>
+  </subsection>
+</section>
  <section name="Tomcat 10.1.17 (schultz)" rtext="in development">
    <subsection name="Catalina">
      <changelog>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to