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

albumenj pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new 8f7d1f37ec Fix ContextFilter not cleanup thread (#10615)
8f7d1f37ec is described below

commit 8f7d1f37ec7480774951f49ca36025bc89edb76d
Author: Albumen Kevin <[email protected]>
AuthorDate: Mon Sep 19 15:11:51 2022 +0800

    Fix ContextFilter not cleanup thread (#10615)
---
 .../apache/dubbo/common/threadpool/serial/SerializingExecutor.java    | 4 ++++
 .../dubbo/remoting/transport/dispatcher/ChannelEventRunnable.java     | 4 +++-
 .../src/main/java/org/apache/dubbo/rpc/filter/ContextFilter.java      | 3 +++
 3 files changed, 10 insertions(+), 1 deletion(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/serial/SerializingExecutor.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/serial/SerializingExecutor.java
index bc82f26b25..041ba56839 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/serial/SerializingExecutor.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/threadpool/serial/SerializingExecutor.java
@@ -19,6 +19,7 @@ package org.apache.dubbo.common.threadpool.serial;
 
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.common.threadlocal.InternalThreadLocal;
 
 import java.util.Queue;
 import java.util.concurrent.ConcurrentLinkedQueue;
@@ -96,9 +97,12 @@ public final class SerializingExecutor implements Executor, 
Runnable {
         try {
             while ((r = runQueue.poll()) != null) {
                 try {
+                    InternalThreadLocal.removeAll();
                     r.run();
                 } catch (RuntimeException e) {
                     LOGGER.error("Exception while executing runnable " + r, e);
+                } finally {
+                    InternalThreadLocal.removeAll();
                 }
             }
         } finally {
diff --git 
a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/transport/dispatcher/ChannelEventRunnable.java
 
b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/transport/dispatcher/ChannelEventRunnable.java
index ffd6f2a381..64a41253d0 100644
--- 
a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/transport/dispatcher/ChannelEventRunnable.java
+++ 
b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/transport/dispatcher/ChannelEventRunnable.java
@@ -18,6 +18,7 @@ package org.apache.dubbo.remoting.transport.dispatcher;
 
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.common.threadlocal.InternalThreadLocal;
 import org.apache.dubbo.remoting.Channel;
 import org.apache.dubbo.remoting.ChannelHandler;
 
@@ -52,6 +53,7 @@ public class ChannelEventRunnable implements Runnable {
 
     @Override
     public void run() {
+        InternalThreadLocal.removeAll();
         if (state == ChannelState.RECEIVED) {
             try {
                 handler.received(channel, message);
@@ -95,7 +97,7 @@ public class ChannelEventRunnable implements Runnable {
                 logger.warn("unknown state: " + state + ", message is " + 
message);
             }
         }
-
+        InternalThreadLocal.removeAll();
     }
 
     /**
diff --git 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/ContextFilter.java
 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/ContextFilter.java
index 356995d864..93d5f2b58e 100644
--- 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/ContextFilter.java
+++ 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/ContextFilter.java
@@ -131,6 +131,9 @@ public class ContextFilter implements Filter, 
Filter.Listener {
             return invoker.invoke(invocation);
         } finally {
             context.clearAfterEachInvoke(true);
+            if (context.isAsyncStarted()) {
+                removeContext();
+            }
         }
     }
 

Reply via email to