Skip to content

Commit 1ee2738

Browse files
authored
Merge branch 'main' into fix/android/id_java_kotlin_frames_tombstone
2 parents 4d4b081 + 70118e9 commit 1ee2738

File tree

3 files changed

+28
-5
lines changed

3 files changed

+28
-5
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
### Fixes
66

7+
- Fix crash when unregistering `SystemEventsBroadcastReceiver` with try-catch block. ([#5106](https://github.com/getsentry/sentry-java/pull/5106))
78
- Identify and correctly structure Java/Kotlin frames in mixed Tombstone stack traces. ([#5116](https://github.com/getsentry/sentry-java/pull/5116))
89

910
## 8.33.0

sentry-android-core/src/main/java/io/sentry/android/core/SystemEventsBreadcrumbsIntegration.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -203,13 +203,13 @@ private void scheduleUnregisterReceiver() {
203203
}
204204

205205
try {
206-
options.getExecutorService().submit(() -> unregisterReceiver());
206+
options.getExecutorService().submit(() -> unregisterReceiver(options));
207207
} catch (RejectedExecutionException e) {
208-
unregisterReceiver();
208+
unregisterReceiver(options);
209209
}
210210
}
211211

212-
private void unregisterReceiver() {
212+
private void unregisterReceiver(final @NotNull SentryAndroidOptions options) {
213213
final @Nullable SystemEventsBroadcastReceiver receiverRef;
214214
try (final @NotNull ISentryLifecycleToken ignored = receiverLock.acquire()) {
215215
isStopped = true;
@@ -218,7 +218,14 @@ private void unregisterReceiver() {
218218
}
219219

220220
if (receiverRef != null) {
221-
context.unregisterReceiver(receiverRef);
221+
try {
222+
context.unregisterReceiver(receiverRef);
223+
} catch (Throwable exception) {
224+
options
225+
.getLogger()
226+
.log(
227+
SentryLevel.ERROR, exception, "Failed to unregister SystemEventsBroadcastReceiver");
228+
}
222229
}
223230
}
224231

sentry-android-core/src/test/java/io/sentry/android/core/SystemEventsBreadcrumbsIntegrationTest.kt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ class SystemEventsBreadcrumbsIntegrationTest {
5252
lateinit var shadowActivityManager: ShadowActivityManager
5353

5454
fun getSut(
55+
contextForSut: Context = context,
5556
enableSystemEventBreadcrumbs: Boolean = true,
5657
enableSystemEventBreadcrumbsExtras: Boolean = false,
5758
executorService: ISentryExecutorService = ImmediateExecutorService(),
@@ -64,7 +65,7 @@ class SystemEventsBreadcrumbsIntegrationTest {
6465
this.executorService = executorService
6566
}
6667
return SystemEventsBreadcrumbsIntegration(
67-
context,
68+
contextForSut,
6869
SystemEventsBreadcrumbsIntegration.getDefaultActions().toTypedArray(),
6970
handler,
7071
)
@@ -313,6 +314,20 @@ class SystemEventsBreadcrumbsIntegrationTest {
313314
assertFalse(fixture.options.isEnableSystemEventBreadcrumbs)
314315
}
315316

317+
@Test
318+
fun `Do not crash if receiver already unregistered`() {
319+
val realContext = ApplicationProvider.getApplicationContext<Context>()
320+
val sut = fixture.getSut(realContext)
321+
322+
sut.register(fixture.scopes, fixture.options)
323+
324+
realContext.unregisterReceiver(sut.receiver)
325+
326+
val result = runCatching { sut.onBackground() }
327+
328+
assertFalse(result.isFailure)
329+
}
330+
316331
@Test
317332
fun `when str has full package, return last string after dot`() {
318333
val sut = fixture.getSut()

0 commit comments

Comments
 (0)