mirror of https://github.com/apache/activemq.git
Fixing copy method of ActiveMQTextMessage to prevent a race condition when concurrent store and dispatch is used with Queues We may need explicity synchronization between the text and content fields in the future if other issues pop up
This commit is contained in:
parent
30d6ad72fa
commit
ea09159a40
|
@ -55,6 +55,12 @@ public class ActiveMQTextMessage extends ActiveMQMessage implements TextMessage
|
||||||
}
|
}
|
||||||
|
|
||||||
private void copy(ActiveMQTextMessage copy) {
|
private void copy(ActiveMQTextMessage copy) {
|
||||||
|
//AMQ-6218 - Save text before calling super.copy() to prevent a race condition when
|
||||||
|
//concurrent store and dispatch is enabled in KahaDB
|
||||||
|
//The issue is sometimes beforeMarshall() gets called in between the time content and
|
||||||
|
//text are copied to the new object leading to both fields being null when text should
|
||||||
|
//not be null
|
||||||
|
String text = this.text;
|
||||||
super.copy(copy);
|
super.copy(copy);
|
||||||
copy.text = text;
|
copy.text = text;
|
||||||
}
|
}
|
||||||
|
@ -79,9 +85,11 @@ public class ActiveMQTextMessage extends ActiveMQMessage implements TextMessage
|
||||||
@Override
|
@Override
|
||||||
public String getText() throws JMSException {
|
public String getText() throws JMSException {
|
||||||
ByteSequence content = getContent();
|
ByteSequence content = getContent();
|
||||||
|
String text = this.text;
|
||||||
|
|
||||||
if (text == null && content != null) {
|
if (text == null && content != null) {
|
||||||
text = decodeContent(content);
|
text = decodeContent(content);
|
||||||
|
this.text = text;
|
||||||
setContent(null);
|
setContent(null);
|
||||||
setCompressed(false);
|
setCompressed(false);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue