Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DefaultAndroidEventProcessor causes ANR #2095

Closed
bruno-garcia opened this issue Jun 13, 2022 · 3 comments
Closed

DefaultAndroidEventProcessor causes ANR #2095

bruno-garcia opened this issue Jun 13, 2022 · 3 comments
Labels
Platform: Android Type: Bug Something isn't working

Comments

@bruno-garcia
Copy link
Member

bruno-garcia commented Jun 13, 2022

Came from a customer: https://getsentry.atlassian.net/browse/MOBILE-257

Only happens on some devices. Probably just some low end devices.

#00  pc 000000000007550c  /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)
  #00  pc 00000000001af800  /apex/com.android.art/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+148)
  #00  pc 0000000000669f3c  /apex/com.android.art/lib64/libart.so (art::GoToRunnable(art::Thread*)+460)
  #00  pc 0000000000669d2c  /apex/com.android.art/lib64/libart.so (art::JniMethodEnd(unsigned int, art::Thread*)+28)
  at android.os.BinderProxy.transactNative (Native method)
  at android.os.BinderProxy.transact (BinderProxy.java:568)
  at android.net.IConnectivityManager$Stub$Proxy.getActiveNetwork (IConnectivityManager.java:2435)
  at android.net.ConnectivityManager.getActiveNetwork (ConnectivityManager.java:1033)
  at io.sentry.android.core.internal.util.ConnectivityChecker.getConnectionType (ConnectivityChecker.java:101)
  at io.sentry.android.core.DefaultAndroidEventProcessor.setDeviceIO (DefaultAndroidEventProcessor.java:375)
  at io.sentry.android.core.DefaultAndroidEventProcessor.getDevice (DefaultAndroidEventProcessor.java:285)
  at io.sentry.android.core.DefaultAndroidEventProcessor.setDevice (DefaultAndroidEventProcessor.java:173)
  at io.sentry.android.core.DefaultAndroidEventProcessor.setCommons (DefaultAndroidEventProcessor.java:140)
  at io.sentry.android.core.DefaultAndroidEventProcessor.process (DefaultAndroidEventProcessor.java:130)
  at io.sentry.SentryClient.processEvent (SentryClient.java:206)
  at io.sentry.SentryClient.captureEvent (SentryClient.java:88)
  at io.sentry.Hub.captureEvent (Hub.java:89)
  at io.sentry.Sentry.captureEvent (Sentry.java:262)
  at io.sentry.HubAdapter.captureEvent (HubAdapter.java:29)
  at io.sentry.IHub.captureEvent (IHub.java:39)
  at io.sentry.IHub$-CC.$default$captureEvent (IHub.java)
  at io.sentry.HubAdapter.captureEvent (HubAdapter.java:29)

And:

#00  pc 0000000000086f8c  /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)
  #00  pc 00000000001b27a4  /apex/com.android.art/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+148)
  #00  pc 000000000067e9d0  /apex/com.android.art/lib64/libart.so (art::GoToRunnable(art::Thread*)+480)
  #00  pc 000000000067e7ac  /apex/com.android.art/lib64/libart.so (art::JniMethodEnd(unsigned int, art::Thread*)+28)
  at android.os.BinderProxy.transactNative (Native method)
  at android.os.BinderProxy.transact (BinderProxy.java:605)
  at android.app.IActivityManager$Stub$Proxy.registerReceiverWithFeature (IActivityManager.java:6380)
  at android.app.ContextImpl.registerReceiverInternal (ContextImpl.java:1696)
  at android.app.ContextImpl.registerReceiver (ContextImpl.java:1650)
  at android.app.ContextImpl.registerReceiver (ContextImpl.java:1638)
  at android.content.ContextWrapper.registerReceiver (ContextWrapper.java:686)
  at io.sentry.android.core.DefaultAndroidEventProcessor.getBatteryIntent (DefaultAndroidEventProcessor.java:434)
  at io.sentry.android.core.DefaultAndroidEventProcessor.setDeviceIO (DefaultAndroidEventProcessor.java:326)
  at io.sentry.android.core.DefaultAndroidEventProcessor.getDevice (DefaultAndroidEventProcessor.java:285)
  at io.sentry.android.core.DefaultAndroidEventProcessor.setDevice (DefaultAndroidEventProcessor.java:173)
  at io.sentry.android.core.DefaultAndroidEventProcessor.setCommons (DefaultAndroidEventProcessor.java:140)
  at io.sentry.android.core.DefaultAndroidEventProcessor.process (DefaultAndroidEventProcessor.java:130)
  at io.sentry.SentryClient.processEvent (SentryClient.java:206)
  at io.sentry.SentryClient.captureEvent (SentryClient.java:88)
  at io.sentry.Hub.captureEvent (Hub.java:89)
  at io.sentry.Sentry.captureEvent (Sentry.java:262)
  at io.sentry.HubAdapter.captureEvent (HubAdapter.java:29)

Problem seems to be that we call some APIs that can be rather slow.
Potentially we could gracefully degrade by detecting if the device is low end. Or disabling the known possibly slow APIs to become opt-in.

@marandaneto
Copy link
Contributor

It's not slow, it's in a deadlock state.

Similar issues https://issuetracker.google.com/issues/230950647
https://issuetracker.google.com/issues/218444754
https://issuetracker.google.com/issues/204481907
https://stackoverflow.com/questions/60867936/app-process-blocked-at-artconditionvariablewaitholdinglocks-how-to-find-the

I could not find a way to avoid the deadlock since we don't know if we should skip it or not the IPC APIs.

@bruno-garcia
Copy link
Member Author

bruno-garcia commented Jun 17, 2022

Resolved on 6.1.1 and troubleshooting page added: getsentry/sentry-docs#5170

It's not slow, it's in a deadlock state.

Should we opt-in to that by default?

Repository owner moved this from Needs Discussion to Done in Mobile & Cross Platform SDK Jun 17, 2022
@marandaneto
Copy link
Contributor

Resolved on 6.1.1 and troubleshooting page added: getsentry/sentry-docs#5170

It's not slow, it's in a deadlock state.

Should we opt-in to that by default?

I don't think so, this is an edge case and we've not gotten from anyone else so far.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Platform: Android Type: Bug Something isn't working
Projects
Archived in project
Development

No branches or pull requests

2 participants