You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by mi...@apache.org on 2019/01/18 22:42:42 UTC

[activemq-artemis] branch master updated: NO-JIRA fix writableBuffer so that its only visible after sub statements

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

michaelpearce pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/master by this push:
     new 39ff9f4  NO-JIRA fix writableBuffer so that its only visible after sub statements
     new de90d8c  This closes #2508
39ff9f4 is described below

commit 39ff9f43b263ca9778b7a156c8ac7ff9b595e6fe
Author: Michael André Pearce <mi...@me.com>
AuthorDate: Fri Jan 18 22:41:17 2019 +0000

    NO-JIRA fix writableBuffer so that its only visible after sub statements
    
    Potential race condition. This assignment to writableBuffer is visible to other threads before the subsequent statements are executed.
---
 .../org/apache/activemq/artemis/core/message/impl/CoreMessage.java     | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java
index 7c2ea58..a53c4f2 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java
@@ -386,11 +386,12 @@ public class CoreMessage extends RefCountMessage implements ICoreMessage {
       if (writableBuffer == null) {
          synchronized (this) {
             if (writableBuffer == null) {
-               writableBuffer = new ResetLimitWrappedActiveMQBuffer(BODY_OFFSET, buffer.duplicate(), this);
+               ResetLimitWrappedActiveMQBuffer writableBuffer = new ResetLimitWrappedActiveMQBuffer(BODY_OFFSET, buffer.duplicate(), this);
                if (endOfBodyPosition > 0) {
                   writableBuffer.byteBuf().setIndex(BODY_OFFSET, endOfBodyPosition - BUFFER_HEADER_SPACE + BODY_OFFSET);
                   writableBuffer.resetReaderIndex();
                }
+               this.writableBuffer = writableBuffer;
             }
          }
       }