diff --git a/src/main/java/org/codelibs/fess/thumbnail/ThumbnailGenerator.java b/src/main/java/org/codelibs/fess/thumbnail/ThumbnailGenerator.java index 2ea393d91..291dce709 100644 --- a/src/main/java/org/codelibs/fess/thumbnail/ThumbnailGenerator.java +++ b/src/main/java/org/codelibs/fess/thumbnail/ThumbnailGenerator.java @@ -26,4 +26,5 @@ public interface ThumbnailGenerator { boolean isAvailable(); + void destroy(); } diff --git a/src/main/java/org/codelibs/fess/thumbnail/ThumbnailManager.java b/src/main/java/org/codelibs/fess/thumbnail/ThumbnailManager.java index b817c89c5..7c010d391 100644 --- a/src/main/java/org/codelibs/fess/thumbnail/ThumbnailManager.java +++ b/src/main/java/org/codelibs/fess/thumbnail/ThumbnailManager.java @@ -107,10 +107,12 @@ public class ThumbnailManager { while (generating) { try { thumbnailTaskQueue.take().generate(); - } catch (final InterruptedException e1) { - logger.debug("Interupted task.", e1); - } catch (final Exception e2) { - logger.warn("Failed to generage a thumbnail.", e2); + } catch (final InterruptedException e) { + logger.debug("Interupted task.", e); + } catch (final Exception e) { + if (generating) { + logger.warn("Failed to generage a thumbnail.", e); + } } } }, "ThumbnailGenerator"); @@ -121,6 +123,18 @@ public class ThumbnailManager { public void destroy() { generating = false; thumbnailGeneratorThread.interrupt(); + try { + thumbnailGeneratorThread.join(10000); + } catch (InterruptedException e) { + logger.warn("Thumbnail thread is timeouted.", e); + } + generatorList.forEach(g -> { + try { + g.destroy(); + } catch (final Exception e) { + logger.warn("Failed to stop thumbnail generator.", e); + } + }); } public void generate(final Map docMap) { diff --git a/src/main/java/org/codelibs/fess/thumbnail/impl/CommandGenerator.java b/src/main/java/org/codelibs/fess/thumbnail/impl/CommandGenerator.java index 79302b2ce..8b0578b70 100644 --- a/src/main/java/org/codelibs/fess/thumbnail/impl/CommandGenerator.java +++ b/src/main/java/org/codelibs/fess/thumbnail/impl/CommandGenerator.java @@ -25,7 +25,6 @@ import java.util.Timer; import java.util.TimerTask; import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; @@ -50,7 +49,6 @@ public class CommandGenerator extends BaseThumbnailGenerator { destoryTimer = new Timer("CommandGeneratorDestoryTimer-" + System.currentTimeMillis(), true); } - @PreDestroy public void destroy() { destoryTimer.cancel(); destoryTimer = null; diff --git a/src/main/java/org/codelibs/fess/thumbnail/impl/WebDriverGenerator.java b/src/main/java/org/codelibs/fess/thumbnail/impl/WebDriverGenerator.java index 502fe87bf..79271d2e9 100644 --- a/src/main/java/org/codelibs/fess/thumbnail/impl/WebDriverGenerator.java +++ b/src/main/java/org/codelibs/fess/thumbnail/impl/WebDriverGenerator.java @@ -23,7 +23,6 @@ import java.io.IOException; import java.util.Collection; import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; import javax.imageio.ImageIO; import org.codelibs.fess.util.ComponentUtil; @@ -90,7 +89,6 @@ public class WebDriverGenerator extends BaseThumbnailGenerator { } } - @PreDestroy public void destroy() { if (webDriver != null) { webDriver.quit();