Github user michaelandrepearce commented on a diff in the pull request: https://github.com/apache/activemq-artemis/pull/2427#discussion_r233496010 --- Diff: artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java --- @@ -564,34 +604,59 @@ public CoreMessage setUserID(UUID userID) { /** * I am keeping this synchronized as the decode of the Properties is lazy */ - protected TypedProperties checkProperties() { + protected final TypedProperties checkProperties() { try { + TypedProperties properties = this.properties; if (properties == null) { - synchronized (this) { - if (properties == null) { - TypedProperties properties = new TypedProperties(); - if (buffer != null && propertiesLocation >= 0) { - final ByteBuf byteBuf = buffer.duplicate().readerIndex(propertiesLocation); - properties.decode(byteBuf, coreMessageObjectPools == null ? null : coreMessageObjectPools.getPropertiesDecoderPools()); - } - this.properties = properties; - } + properties = getOrInitializeTypedProperties(); + } + return properties; + } catch (Throwable e) { + throw onCheckPropertiesError(e); + } + } + + private TypedProperties getOrInitializeTypedProperties() { + synchronized (this) { --- End diff -- if youre separating this to its own method, which is nice +1, theres an extra trick which is to change from sync block to sync method, which will be marginally faster.
---