James Moger
2014-02-28 388a233e8ec78c5d7279f9cef85245ea3c85534e
src/main/java/com/gitblit/manager/RepositoryManager.java
@@ -169,6 +169,7 @@
      gcExecutor.close();
      mirrorExecutor.close();
      closeAll();
      return this;
   }
@@ -1084,12 +1085,49 @@
   }
   /**
    * Returns true if the repository is idle (not being accessed).
    *
    * @param repository
    * @return true if the repository is idle
    */
   @Override
   public boolean isIdle(Repository repository) {
      try {
         // Read the use count.
         // An idle use count is 2:
         // +1 for being in the cache
         // +1 for the repository parameter in this method
         Field useCnt = Repository.class.getDeclaredField("useCnt");
         useCnt.setAccessible(true);
         int useCount = ((AtomicInteger) useCnt.get(repository)).get();
         return useCount == 2;
      } catch (Exception e) {
         logger.warn(MessageFormat
               .format("Failed to reflectively determine use count for repository {0}",
                     repository.getDirectory().getPath()), e);
      }
      return false;
   }
   /**
    * Ensures that all cached repository are completely closed and their resources
    * are properly released.
    */
   @Override
   public void closeAll() {
      for (String repository : getRepositoryList()) {
         close(repository);
      }
   }
   /**
    * Ensure that a cached repository is completely closed and its resources
    * are properly released.
    *
    * @param repositoryName
    */
   private void closeRepository(String repositoryName) {
   @Override
   public void close(String repositoryName) {
      Repository repository = getRepository(repositoryName);
      if (repository == null) {
         return;
@@ -1114,7 +1152,7 @@
                     repositoryName), e);
      }
      if (uses > 0) {
         logger.info(MessageFormat
         logger.debug(MessageFormat
               .format("{0}.useCnt={1}, calling close() {2} time(s) to close object and ref databases",
                     repositoryName, uses, uses));
         for (int i = 0; i < uses; i++) {
@@ -1252,7 +1290,7 @@
                     "Failed to rename ''{0}'' because ''{1}'' already exists.",
                     repositoryName, repository.name));
            }
            closeRepository(repositoryName);
            close(repositoryName);
            File folder = new File(repositoriesFolder, repositoryName);
            File destFolder = new File(repositoriesFolder, repository.name);
            if (destFolder.exists()) {
@@ -1477,7 +1515,7 @@
   @Override
   public boolean deleteRepository(String repositoryName) {
      try {
         closeRepository(repositoryName);
         close(repositoryName);
         // clear the repository cache
         clearRepositoryMetadataCache(repositoryName);