Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Changelog

## Unreleased

### Fixes

- Fix crash when unregistering `SystemEventsBroadcastReceiver` with try-catch block. ([#5106](https://github.com/getsentry/sentry-java/pull/5106))

## 8.33.0

### Features
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -203,13 +203,13 @@ private void scheduleUnregisterReceiver() {
}

try {
options.getExecutorService().submit(() -> unregisterReceiver());
options.getExecutorService().submit(() -> unregisterReceiver(options));
} catch (RejectedExecutionException e) {
unregisterReceiver();
unregisterReceiver(options);
}
}

private void unregisterReceiver() {
private void unregisterReceiver(final @NotNull SentryAndroidOptions options) {
final @Nullable SystemEventsBroadcastReceiver receiverRef;
try (final @NotNull ISentryLifecycleToken ignored = receiverLock.acquire()) {
isStopped = true;
Expand All @@ -218,7 +218,16 @@ private void unregisterReceiver() {
}

if (receiverRef != null) {
context.unregisterReceiver(receiverRef);
try {
context.unregisterReceiver(receiverRef);
} catch (Throwable exception) {
options
.getLogger()
.log(
SentryLevel.ERROR,
exception,
"Failed to unregister SystemEventsBroadcastReceiver", exception);
Comment thread
cursor[bot] marked this conversation as resolved.
Outdated
Comment thread
sentry[bot] marked this conversation as resolved.
Outdated
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ class SystemEventsBreadcrumbsIntegrationTest {
lateinit var shadowActivityManager: ShadowActivityManager

fun getSut(
contextForSut: Context = context,
enableSystemEventBreadcrumbs: Boolean = true,
enableSystemEventBreadcrumbsExtras: Boolean = false,
executorService: ISentryExecutorService = ImmediateExecutorService(),
Expand All @@ -64,7 +65,7 @@ class SystemEventsBreadcrumbsIntegrationTest {
this.executorService = executorService
}
return SystemEventsBreadcrumbsIntegration(
context,
contextForSut,
SystemEventsBreadcrumbsIntegration.getDefaultActions().toTypedArray(),
handler,
)
Expand Down Expand Up @@ -313,6 +314,20 @@ class SystemEventsBreadcrumbsIntegrationTest {
assertFalse(fixture.options.isEnableSystemEventBreadcrumbs)
}

@Test
fun `Do not crash if receiver already unregistered`() {
val realContext = ApplicationProvider.getApplicationContext<Context>()
val sut = fixture.getSut(realContext)

sut.register(fixture.scopes, fixture.options)

realContext.unregisterReceiver(sut.receiver)

val result = runCatching { sut.onBackground() }

assertFalse(result.isFailure)
}

@Test
fun `when str has full package, return last string after dot`() {
val sut = fixture.getSut()
Expand Down