Index: src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java =================================================================== --- src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java (revision 802755) +++ src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java (working copy) @@ -154,6 +154,11 @@ private final Thread changeFeed; /** + * Flag that indicates that the changeFeed thread should be disposed. + */ + private volatile boolean disposeChangeFeed = false; + + /** * List of event listener that are set on this WorkspaceManager to get * notifications about local and external changes. */ @@ -592,7 +597,9 @@ try { updateSync.acquire(); if (changeFeed != null) { + disposeChangeFeed = true; changeFeed.interrupt(); + changeFeed.join(); } hierarchyManager.dispose(); if (subscription != null) { @@ -1132,7 +1139,7 @@ } public void run() { - while (!Thread.interrupted()) { + while (!Thread.interrupted() && !disposeChangeFeed) { try { InternalEventListener[] iel; Subscription subscr; @@ -1151,7 +1158,7 @@ sessionInfo.getWorkspaceName()); // check if thread had been interrupted while // getting events - if (Thread.interrupted()) { + if (Thread.interrupted() || disposeChangeFeed) { log.debug("Thread interrupted, terminating..."); break; }