Skip to content

Commit d4f536c

Browse files
romtsnclaude
andcommitted
Add executor leak regression test to ReplayIntegrationTest
Uses real ScheduledThreadPoolExecutor threads so the test actually fails if the shutdown in close() is removed. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent bb4b7e0 commit d4f536c

1 file changed

Lines changed: 21 additions & 0 deletions

File tree

sentry-android-replay/src/test/java/io/sentry/android/replay/ReplayIntegrationTest.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,6 +1110,27 @@ class ReplayIntegrationTest {
11101110
assertEquals(traceId, traceIdRegistered)
11111111
}
11121112

1113+
@Test
1114+
fun `close shuts down persisting executor so no SentryReplayPersister threads leak`() {
1115+
fixture.options.cacheDirPath = tmpDir.newFolder().absolutePath
1116+
1117+
repeat(3) {
1118+
val replay = fixture.getSut(context)
1119+
replay.register(fixture.scopes, fixture.options)
1120+
replay.start()
1121+
replay.close()
1122+
}
1123+
1124+
Thread.sleep(200)
1125+
1126+
val leakedThreads =
1127+
Thread.getAllStackTraces().keys.filter { it.name.startsWith("SentryReplayPersister-") }
1128+
assertTrue(
1129+
leakedThreads.isEmpty(),
1130+
"Expected no SentryReplayPersister threads after close(), found: ${leakedThreads.map { it.name }}",
1131+
)
1132+
}
1133+
11131134
private fun getSessionCaptureStrategy(options: SentryOptions): SessionCaptureStrategy =
11141135
SessionCaptureStrategy(
11151136
options,

0 commit comments

Comments
 (0)