From 8a5dc38a583fb3810d81f75b7d5085c852a9325e Mon Sep 17 00:00:00 2001 From: Guimu <30684111+daguimu@users.noreply.github.com> Date: Thu, 23 Apr 2026 14:09:05 +0800 Subject: [PATCH] fix: ensure super.stop() is called exactly once in CanalRabbitMQProducer (#5578) Previously super.stop() was called both inside the try block and after the catch blocks. On success it was invoked twice; on IOException it was never reached. Move super.stop() to a finally block so it executes exactly once regardless of whether close() succeeds or fails. Co-authored-by: Claude Opus 4.6 (1M context) --- .../connector/rabbitmq/producer/CanalRabbitMQProducer.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/connector/rabbitmq-connector/src/main/java/com/alibaba/otter/canal/connector/rabbitmq/producer/CanalRabbitMQProducer.java b/connector/rabbitmq-connector/src/main/java/com/alibaba/otter/canal/connector/rabbitmq/producer/CanalRabbitMQProducer.java index 93347877..64f8fdc3 100644 --- a/connector/rabbitmq-connector/src/main/java/com/alibaba/otter/canal/connector/rabbitmq/producer/CanalRabbitMQProducer.java +++ b/connector/rabbitmq-connector/src/main/java/com/alibaba/otter/canal/connector/rabbitmq/producer/CanalRabbitMQProducer.java @@ -210,13 +210,12 @@ public class CanalRabbitMQProducer extends AbstractMQProducer implements CanalMQ try { this.channel.close(); this.connect.close(); - super.stop(); } catch (AlreadyClosedException ex) { logger.error("Connection is already closed", ex); } catch (IOException | TimeoutException ex) { throw new CanalException("Stop RabbitMQ producer error", ex); + } finally { + super.stop(); } - - super.stop(); } }