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

lhotari pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/pulsar.git

commit 306b4ce78ee535d2dfdf65dd9a6307c68bec8c80
Author: 道君- Tao Jiuming <[email protected]>
AuthorDate: Mon Jul 21 14:16:04 2025 +0800

    [fix][client] Fix ClientCnx handleSendError NPE (#24517)
    
    (cherry picked from commit bb3b6a4e081c63e13afaff6c05169219c0002011)
---
 .../main/java/org/apache/pulsar/client/impl/ClientCnx.java  | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git 
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ClientCnx.java 
b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ClientCnx.java
index f798980c299..90bc351ee24 100644
--- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ClientCnx.java
+++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ClientCnx.java
@@ -765,16 +765,21 @@ public class ClientCnx extends PulsarHandler {
         long producerId = sendError.getProducerId();
         long sequenceId = sendError.getSequenceId();
 
+        ProducerImpl<?> producer = producers.get(producerId);
+        if (producer == null) {
+            log.warn("{} Producer with id {} not found while handling send 
error", ctx.channel(), producerId);
+            return;
+        }
+
         switch (sendError.getError()) {
         case ChecksumError:
-            producers.get(producerId).recoverChecksumError(this, sequenceId);
+            producer.recoverChecksumError(this, sequenceId);
             break;
-
         case TopicTerminatedError:
-            producers.get(producerId).terminated(this);
+            producer.terminated(this);
             break;
         case NotAllowedError:
-            producers.get(producerId).recoverNotAllowedError(sequenceId, 
sendError.getMessage());
+            producer.recoverNotAllowedError(sequenceId, 
sendError.getMessage());
             break;
 
         default:

Reply via email to