From 260e28ecadc654ce3f0a5b6c7058788235265574 Mon Sep 17 00:00:00 2001 From: gtully Date: Mon, 2 Mar 2015 14:09:58 +0000 Subject: [PATCH] https://issues.apache.org/jira/browse/AMQ-5620 - avoid potential deadlock on shutdown - waiting on connections to stop before stopping the pa would be an alternative but may block for ever, auto rollback ensures there is no need --- .../store/kahadb/disk/journal/Journal.java | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/journal/Journal.java b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/journal/Journal.java index 91f82aecef..54386cb730 100644 --- a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/journal/Journal.java +++ b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/journal/Journal.java @@ -463,20 +463,25 @@ public class Journal { return dataFile.getNext(); } - public synchronized void close() throws IOException { - if (!started) { - return; + public void close() throws IOException { + synchronized (this) { + if (!started) { + return; + } + if (this.timer != null) { + this.timer.cancel(); + } + accessorPool.close(); } - if (this.timer != null) { - this.timer.cancel(); - } - accessorPool.close(); + // the appender can be calling back to to the journal blocking a close AMQ-5620 appender.close(); - fileMap.clear(); - fileByFileMap.clear(); - dataFiles.clear(); - lastAppendLocation.set(null); - started = false; + synchronized (this) { + fileMap.clear(); + fileByFileMap.clear(); + dataFiles.clear(); + lastAppendLocation.set(null); + started = false; + } } protected synchronized void cleanup() {