diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/MessageImpl.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/MessageImpl.java index 3e4759c86f027a..695e849bbc7b70 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/MessageImpl.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/MessageImpl.java @@ -276,11 +276,16 @@ public static long getEntryTimestamp( ByteBuf headersAndPayloadWithBrokerEntryMe if (brokerEntryMetadata != null && brokerEntryMetadata.hasBrokerTimestamp()) { return brokerEntryMetadata.getBrokerTimestamp(); } - // otherwise get the publish_time + // otherwise get the publish_time, + long entryTimestamp; MessageImpl msg = (MessageImpl) RECYCLER.get(); - Commands.parseMessageMetadata(headersAndPayloadWithBrokerEntryMetadata, msg.msgMetadata); - long entryTimestamp = msg.getPublishTime(); - msg.recycle(); + try { + Commands.parseMessageMetadata(headersAndPayloadWithBrokerEntryMetadata, msg.msgMetadata); + entryTimestamp = msg.getPublishTime(); + } finally { + // make sure msg can be recycled + msg.recycle(); + } return entryTimestamp; }