From b4dbb3b4efff3f26aaad212832d5fc2f124b142d Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Tue, 30 May 2023 11:38:48 +0200 Subject: [PATCH 1/2] Use daemon threads for SentryExecutorService --- .../main/java/io/sentry/SentryExecutorService.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/sentry/src/main/java/io/sentry/SentryExecutorService.java b/sentry/src/main/java/io/sentry/SentryExecutorService.java index ba0ae4fac5..9097cb7fdc 100644 --- a/sentry/src/main/java/io/sentry/SentryExecutorService.java +++ b/sentry/src/main/java/io/sentry/SentryExecutorService.java @@ -4,6 +4,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.TestOnly; @@ -18,7 +19,7 @@ final class SentryExecutorService implements ISentryExecutorService { } SentryExecutorService() { - this(Executors.newSingleThreadScheduledExecutor()); + this(Executors.newSingleThreadScheduledExecutor(new SentryExecutorServiceThreadFactory())); } @Override @@ -59,4 +60,15 @@ public boolean isClosed() { return executorService.isShutdown(); } } + + private static final class SentryExecutorServiceThreadFactory implements ThreadFactory { + private int cnt; + + @Override + public @NotNull Thread newThread(final @NotNull Runnable r) { + final Thread ret = new Thread(r, "SentryExecutorServiceThreadFactory-" + cnt++); + ret.setDaemon(true); + return ret; + } + } } From 03b80370d436a38e795d038fb45ba38c40db4926 Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Tue, 30 May 2023 11:48:32 +0200 Subject: [PATCH 2/2] Add changelog --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ba3687f9c..3d126d533b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,11 @@ - Add SentryWrapper for Callable and Supplier Interface ([#2720](https://github.com/getsentry/sentry-java/pull/2720)) +### Fixes + +- Use daemon threads for SentryExecutorService ([#2747](https://github.com/getsentry/sentry-java/pull/2747)) + - We started using `SentryExecutorService` in `6.19.0` which caused the application to hang on shutdown unless `Sentry.close()` was called. By using daemon threads we no longer block shutdown. + ## 6.20.0 ### Features