Repository: activemq
Updated Branches:
  refs/heads/master 530c1a819 -> 092c56d70


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/092c56d7
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/092c56d7
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/092c56d7

Branch: refs/heads/master
Commit: 092c56d70c1440fbdb1e91447a1bc4a2c461e5c7
Parents: 530c1a8
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:39:14 2016 +0000

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


http://git-wip-us.apache.org/repos/asf/activemq/blob/092c56d7/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