diff --git a/CHANGES.md b/CHANGES.md index 5146ca5ae..835c8ca2b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -35,6 +35,7 @@ Release Notes. * [Breaking Change] Remove the namespace from `cross process propagation` key. * Make sure the parent endpoint in tracing context from existing first ENTRY span, rather than first span only. * Fix the bug that maybe causing memory leak and repeated traceId when use gateway-2.1.x-plugin or gateway-3.x-plugin. +* Fix Grpc 1.x plugin could leak context due to gRPC cancelled. #### Documentation diff --git a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grpc/v1/server/TracingServerCallListener.java b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grpc/v1/server/TracingServerCallListener.java index 4a0ff7f7c..6e150b19c 100644 --- a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grpc/v1/server/TracingServerCallListener.java +++ b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/grpc/v1/server/TracingServerCallListener.java @@ -73,6 +73,9 @@ public class TracingServerCallListener extends ForwardingServerCallList @Override public void onCancel() { + if (contextSnapshot == null) { + return; + } final AbstractSpan span = ContextManager.createLocalSpan(operationPrefix + REQUEST_ON_CANCEL_OPERATION_NAME); span.setComponent(ComponentsDefine.GRPC); span.setLayer(SpanLayer.RPC_FRAMEWORK);