diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ResteasyAllInOneServletDispatcher.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ResteasyAllInOneServletDispatcher.java index 0cbb3cd671..8f602db766 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ResteasyAllInOneServletDispatcher.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ResteasyAllInOneServletDispatcher.java @@ -7,6 +7,7 @@ import org.jboss.resteasy.plugins.server.servlet.ListenerBootstrap; import org.jboss.resteasy.spi.Registry; import org.jboss.resteasy.spi.ResteasyDeployment; import org.jboss.resteasy.spi.ResteasyProviderFactory; +import org.jboss.resteasy.spi.statistics.StatisticsController; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -70,6 +71,12 @@ public class ResteasyAllInOneServletDispatcher extends HttpServletDispatcher { super.destroy(); deployment.stop(); + // clear ResourceLocatorInvoker leaks + StatisticsController statisticsController = ResteasyProviderFactory.getInstance().getStatisticsController(); + if (statisticsController != null) { + statisticsController.reset(); + } + // ensure everything gets cleared, to avoid classloader leaks ResteasyProviderFactory.clearInstanceIfEqual(ResteasyProviderFactory.getInstance()); RuntimeDelegate.setInstance(null);