You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by al...@apache.org on 2015/08/07 14:59:38 UTC

svn commit: r1694678 - /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java

Author: alexparvulescu
Date: Fri Aug  7 12:59:38 2015
New Revision: 1694678

URL: http://svn.apache.org/r1694678
Log:
OAK-3197 RepositoryImpl doesn't close the scheduler nicely


Modified:
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java?rev=1694678&r1=1694677&r2=1694678&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java Fri Aug  7 12:59:38 2015
@@ -43,6 +43,7 @@ import javax.jcr.Value;
 import javax.security.auth.login.LoginException;
 
 import com.google.common.collect.ImmutableMap;
+
 import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.api.JackrabbitRepository;
 import org.apache.jackrabbit.api.security.authentication.token.TokenCredentials;
@@ -302,12 +303,27 @@ public class RepositoryImpl implements J
     public void shutdown() {
         statisticManager.dispose();
         gcMonitorRegistration.unregister();
-        scheduledExecutor.shutdown();
+        closeExecutor();
         if (contentRepository instanceof Closeable) {
             IOUtils.closeQuietly((Closeable) contentRepository);
         }
     }
 
+    private void closeExecutor() {
+        try {
+            scheduledExecutor.shutdown();
+            scheduledExecutor.awaitTermination(5, TimeUnit.SECONDS);
+        } catch (InterruptedException e) {
+            log.error("Error while shutting down the executorService", e);
+            Thread.currentThread().interrupt();
+        } finally {
+            if (!scheduledExecutor.isTerminated()) {
+                log.warn("executorService didn't shutdown properly. Will be forced now.");
+            }
+            scheduledExecutor.shutdownNow();
+        }
+    }
+
     //------------------------------------------------------------< internal >---
 
     /**