diff --git a/src/main/java/io/vertx/core/eventbus/impl/EventBusImpl.java b/src/main/java/io/vertx/core/eventbus/impl/EventBusImpl.java index 47469a565..05d413dae 100644 --- a/src/main/java/io/vertx/core/eventbus/impl/EventBusImpl.java +++ b/src/main/java/io/vertx/core/eventbus/impl/EventBusImpl.java @@ -276,7 +276,7 @@ public class EventBusImpl implements EventBus, MetricsProvider { } registration.setHandlerContext(context); - HandlerHolder holder = new HandlerHolder<>(metrics, registration, replyHandler, localOnly, context); + HandlerHolder holder = new HandlerHolder<>(registration, replyHandler, localOnly, context); ConcurrentCyclicSequence handlers = new ConcurrentCyclicSequence().add(holder); ConcurrentCyclicSequence actualHandlers = handlerMap.merge( diff --git a/src/main/java/io/vertx/core/eventbus/impl/HandlerHolder.java b/src/main/java/io/vertx/core/eventbus/impl/HandlerHolder.java index 73a2c2862..a3e4d5e4e 100644 --- a/src/main/java/io/vertx/core/eventbus/impl/HandlerHolder.java +++ b/src/main/java/io/vertx/core/eventbus/impl/HandlerHolder.java @@ -19,16 +19,14 @@ import io.vertx.core.spi.metrics.EventBusMetrics; */ public class HandlerHolder { - private final EventBusMetrics metrics; private final Context context; private final HandlerRegistration handler; private final boolean replyHandler; private final boolean localOnly; private boolean removed; - public HandlerHolder(EventBusMetrics metrics, HandlerRegistration handler, boolean replyHandler, boolean localOnly, + public HandlerHolder(HandlerRegistration handler, boolean replyHandler, boolean localOnly, Context context) { - this.metrics = metrics; this.context = context; this.handler = handler; this.replyHandler = replyHandler; @@ -36,7 +34,7 @@ public class HandlerHolder { } // We use a synchronized block to protect removed as it can be unregistered from a different thread - public boolean setRemoved() { + boolean setRemoved() { boolean unregistered = false; synchronized (this) { if (!removed) { @@ -44,9 +42,6 @@ public class HandlerHolder { unregistered = true; } } - if (metrics != null && unregistered) { - metrics.handlerUnregistered(handler.getMetric()); - } return unregistered; } diff --git a/src/main/java/io/vertx/core/eventbus/impl/HandlerRegistration.java b/src/main/java/io/vertx/core/eventbus/impl/HandlerRegistration.java index 470ea63c9..3390f8e92 100644 --- a/src/main/java/io/vertx/core/eventbus/impl/HandlerRegistration.java +++ b/src/main/java/io/vertx/core/eventbus/impl/HandlerRegistration.java @@ -163,6 +163,11 @@ public class HandlerRegistration implements MessageConsumer, Handler consumer = vertices[0].eventBus().consumer(ADDRESS1, ar -> { + fail("Should not receive message"); + }); + consumer.completionHandler(ar -> { + assertTrue(ar.failed()); + assertEquals(Collections.emptyList(), metrics.getRegistrations()); + testComplete(); + }); + consumer.unregister(); + await(); + } + @Test public void testHandlerProcessMessage() { testHandlerProcessMessage(vertx, vertx, 1); diff --git a/src/test/java/io/vertx/test/fakemetrics/FakeEventBusMetrics.java b/src/test/java/io/vertx/test/fakemetrics/FakeEventBusMetrics.java index 0ab1bf149..423cf054c 100644 --- a/src/test/java/io/vertx/test/fakemetrics/FakeEventBusMetrics.java +++ b/src/test/java/io/vertx/test/fakemetrics/FakeEventBusMetrics.java @@ -80,6 +80,9 @@ public class FakeEventBusMetrics extends FakeMetricsBase implements EventBusMetr } public void handlerUnregistered(HandlerMetric handler) { + if (handler == null) { + throw new NullPointerException("Must not be null"); + } registrations.remove(handler); }