Repository: activemq
Updated Branches:
  refs/heads/activemq-5.13.x aea8d453f -> 61dc68880


https://issues.apache.org/jira/browse/AMQ-6250

Checking for null before closing the journal in
MultiKahaDBPersistentAdapter.  Also protecting against multiple calls to
start and stop.


Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/61dc6888
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/61dc6888
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/61dc6888

Branch: refs/heads/activemq-5.13.x
Commit: 61dc6888045544cbaad6b4ea5a3302b3f23fe4d3
Parents: aea8d45
Author: Christopher L. Shannon (cshannon) <[email protected]>
Authored: Thu Apr 14 18:38:31 2016 +0000
Committer: Christopher L. Shannon (cshannon) <[email protected]>
Committed: Thu Apr 14 18:42:08 2016 +0000

----------------------------------------------------------------------
 .../kahadb/MultiKahaDBTransactionStore.java     | 38 +++++++++++---------
 1 file changed, 22 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/61dc6888/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MultiKahaDBTransactionStore.java
----------------------------------------------------------------------
diff --git 
a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MultiKahaDBTransactionStore.java
 
b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MultiKahaDBTransactionStore.java
index 9148b54..90b7c4d 100644
--- 
a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MultiKahaDBTransactionStore.java
+++ 
b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MultiKahaDBTransactionStore.java
@@ -24,6 +24,7 @@ import java.util.Set;
 import java.util.TreeSet;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.activemq.broker.Broker;
 import org.apache.activemq.broker.ConnectionContext;
@@ -61,6 +62,7 @@ public class MultiKahaDBTransactionStore implements 
TransactionStore {
     private Journal journal;
     private int journalMaxFileLength = Journal.DEFAULT_MAX_FILE_LENGTH;
     private int journalWriteBatchSize = Journal.DEFAULT_MAX_WRITE_BATCH_SIZE;
+    private final AtomicBoolean started = new AtomicBoolean(false);
 
     public MultiKahaDBTransactionStore(MultiKahaDBPersistenceAdapter 
multiKahaDBPersistenceAdapter) {
         this.multiKahaDBPersistenceAdapter = multiKahaDBPersistenceAdapter;
@@ -270,20 +272,22 @@ public class MultiKahaDBTransactionStore implements 
TransactionStore {
 
     @Override
     public void start() throws Exception {
-        journal = new Journal() {
-            @Override
-            protected void cleanup() {
-                super.cleanup();
-                txStoreCleanup();
-            }
-        };
-        journal.setDirectory(getDirectory());
-        journal.setMaxFileLength(journalMaxFileLength);
-        journal.setWriteBatchSize(journalWriteBatchSize);
-        IOHelper.mkdirs(journal.getDirectory());
-        journal.start();
-        recoverPendingLocalTransactions();
-        store(new KahaTraceCommand().setMessage("LOADED " + new Date()));
+        if (started.compareAndSet(false, true)) {
+            journal = new Journal() {
+                @Override
+                protected void cleanup() {
+                    super.cleanup();
+                    txStoreCleanup();
+                }
+            };
+            journal.setDirectory(getDirectory());
+            journal.setMaxFileLength(journalMaxFileLength);
+            journal.setWriteBatchSize(journalWriteBatchSize);
+            IOHelper.mkdirs(journal.getDirectory());
+            journal.start();
+            recoverPendingLocalTransactions();
+            store(new KahaTraceCommand().setMessage("LOADED " + new Date()));
+        }
     }
 
     private void txStoreCleanup() {
@@ -304,8 +308,10 @@ public class MultiKahaDBTransactionStore implements 
TransactionStore {
 
     @Override
     public void stop() throws Exception {
-        journal.close();
-        journal = null;
+        if (started.compareAndSet(true, false) && journal != null) {
+            journal.close();
+            journal = null;
+        }
     }
 
     private void recoverPendingLocalTransactions() throws IOException {

Reply via email to