From c78b32e33adab51c1f5a5e2ff87f2e4e0e102bd1 Mon Sep 17 00:00:00 2001
From: Felix Sidokhine <felix.sidokhine@randstad.ca>
Date: Sat, 30 May 2020 12:11:45 +0300
Subject: [PATCH] investigating java-ass problem

---
 jams-ca/src/main/java/net/jami/jams/ca/JamsCA.java        | 8 ++++++++
 .../jams/common/cryptoengineapi/CertificateAuthority.java | 1 +
 .../java/net/jami/jams/server/core/TomcatLauncher.java    | 6 ++++++
 3 files changed, 15 insertions(+)

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 8bebfbc2..6755e212 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 8ea454b8..0d740e94 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 a3378db4..c3c8b9f9 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());
-- 
GitLab