diff --git a/jams-ca/src/main/java/net/jami/jams/ca/JamsCA.java b/jams-ca/src/main/java/net/jami/jams/ca/JamsCA.java index 8bebfbc2eb5a8120a73f0623fbaa70d0976ebb40..6755e2127402d12ab1cb46c6397d4f23d1e5d262 100644 --- a/jams-ca/src/main/java/net/jami/jams/ca/JamsCA.java +++ b/jams-ca/src/main/java/net/jami/jams/ca/JamsCA.java @@ -136,4 +136,12 @@ public class JamsCA implements CertificateAuthority { public X509Certificate getCA() { return CA.getCertificate(); } + + @Override + public boolean shutdownThreads() { + //Unsafe but acceptable. + crlWorker.stop(); + ocspWorker.stop(); + return true; + } } diff --git a/jams-common/src/main/java/net/jami/jams/common/cryptoengineapi/CertificateAuthority.java b/jams-common/src/main/java/net/jami/jams/common/cryptoengineapi/CertificateAuthority.java index 8ea454b8b691dc01ae1393ccf7892e54f5d6ea31..0d740e9477c577366d7cc5d5dc68f7f488de058a 100644 --- a/jams-common/src/main/java/net/jami/jams/common/cryptoengineapi/CertificateAuthority.java +++ b/jams-common/src/main/java/net/jami/jams/common/cryptoengineapi/CertificateAuthority.java @@ -44,5 +44,6 @@ public interface CertificateAuthority { String getLatestCRLPEMEncoded(); OCSPResp getOCSPResponse(OCSPReq ocspRequest); X509Certificate getCA(); + boolean shutdownThreads(); } diff --git a/jams-server/src/main/java/net/jami/jams/server/core/TomcatLauncher.java b/jams-server/src/main/java/net/jami/jams/server/core/TomcatLauncher.java index a3378db4ae08059f70011dde0bd19c001d8d7c52..c3c8b9f9b7db42db14183bc075d41d20a0628ff0 100644 --- a/jams-server/src/main/java/net/jami/jams/server/core/TomcatLauncher.java +++ b/jams-server/src/main/java/net/jami/jams/server/core/TomcatLauncher.java @@ -24,6 +24,8 @@ package net.jami.jams.server.core; import lombok.extern.slf4j.Slf4j; +import net.jami.jams.ca.JamsCA; +import net.jami.jams.server.Server; import org.apache.catalina.WebResourceRoot; import org.apache.catalina.connector.Connector; import org.apache.catalina.core.StandardContext; @@ -39,6 +41,8 @@ import java.net.URI; import java.nio.file.Files; import java.nio.file.Paths; +import static net.jami.jams.server.Server.certificateAuthority; + //This class boots the tomcat server which provides the subsystem //for the API calls. @Slf4j @@ -116,8 +120,10 @@ public class TomcatLauncher { public void stopTomcat() { try { synchronized (tomcat) { + certificateAuthority.shutdownThreads(); tomcat.stop(); tomcat.destroy(); + context.destroy(); } } catch (Exception e) { log.info("Failed to stop tomcat server with error {}", e.getMessage());