Skip to content

APP_SCOUT_HANG on HyperOS during foreground resume (ReplayIntegration Lock Contention) #6352

Description

@ptvinhkhue

What React Native libraries do you use?

RN New Architecture, Expo Application Services (EAS), Expo (mobile only), Expo Router

Are you using sentry.io or on-premise?

sentry.io (SaS)

Are you using any other error monitoring solution alongside Sentry?

No

Other Error Monitoring Solution Name

No response

@sentry/react-native SDK Version

7.2.0

How does your development environment look like?


- react-native: 0.81.5
- expo: 54.0.33
- @sentry/react-native: 7.2.0
- Affected devices: HyperOS 3.0.x (built on Android 16) - Redmi note 14 Pro+, Xiaomi Pad 7



Sentry.init()

init({
    dsn: SENTRY_DSN,
    debug: false,
    dist: SENTRY_DIST,
    release: SENTRY_RELEASE,
    enableUserInteractionTracing: true,
    integrations: [
        navigationIntegration,
        mobileReplayIntegration({
            maskAllImages: true,
            maskAllText: true,
            maskAllVectors: true,
        }),
    ],
    attachScreenshot: false,
    attachViewHierarchy: true,
    tracesSampleRate: SENTRY_TRACES_SAMPLE_RATE,
    profilesSampleRate: SENTRY_PROFILES_SAMPLE_RATE,
    replaysOnErrorSampleRate: SENTRY_REPLAYS_ON_ERROR_SAMPLE_RATE,
    replaysSessionSampleRate: SENTRY_REPLAYS_SESSION_SAMPLE_RATE),
    replaysSessionQuality: 'low',
});

Steps to Reproduce

  1. Open the app
  2. Move app to background (by returning to Home or open another app)
  3. Wait for about 20-30s
  4. Bring the app to foreground (by opening from Recent apps)

Expected Result

The app should be resumed without error and remain the previous state.

Actual Result

The app is resumed with grey/white screen and stuck at it.

Logcat:
`
Event:APP_SCOUT_WARNING Thread:main backtrace:
at jdk.internal.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:221)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:754)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:990)
at java.util.concurrent.locks.ReentrantLock$Sync.lock(ReentrantLock.java:153)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:322)
at io.sentry.util.AutoClosableReentrantLock.acquire(AutoClosableReentrantLock.java:12)
at io.sentry.android.replay.ReplayIntegration.start(ReplayIntegration.kt:158)
at io.sentry.android.core.LifecycleWatcher.startSession(LifecycleWatcher.java:87)
at io.sentry.android.core.LifecycleWatcher.onForeground(LifecycleWatcher.java:62)
at io.sentry.android.core.AppState$LifecycleObserver.onStart(AppState.java:202)
at androidx.lifecycle.DefaultLifecycleObserverAdapter.onStateChanged(DefaultLifecycleObserverAdapter.kt:25)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.jvm.kt:320)
at androidx.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.jvm.kt:257)
at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.jvm.kt:293)
at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.jvm.kt:142)
at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.jvm.kt:124)
at androidx.lifecycle.ProcessLifecycleOwner.activityStarted$lifecycle_process_release(ProcessLifecycleOwner.kt:97)
at androidx.lifecycle.ProcessLifecycleOwner$attach$1$onActivityPreCreated$1.onActivityPostStarted(ProcessLifecycleOwner.kt:160)
at android.app.Activity.dispatchActivityPostStarted(Activity.java:1718)
at android.app.Activity.performStart(Activity.java:9522)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:4746)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:217)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:197)
at android.app.servertransaction.TransactionExecutor.executeLifecycleItem(TransactionExecutor.java:169)
at android.app.servertransaction.TransactionExecutor.executeTransactionItems(TransactionExecutor.java:104)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:83)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:3103)
at android.os.Handler.dispatchMessage(Handler.java:114)
at android.os.Looper.loopOnce(Looper.java:274)
at android.os.Looper.loop(Looper.java:369)
at android.app.ActivityThread.main(ActivityThread.java:10090)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:616)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1137)

Event:APP_SCOUT_HANG Thread:main backtrace:
at jdk.internal.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:221)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:754)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:990)
at java.util.concurrent.locks.ReentrantLock$Sync.lock(ReentrantLock.java:153)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:322)
at io.sentry.util.AutoClosableReentrantLock.acquire(AutoClosableReentrantLock.java:12)
at io.sentry.android.replay.ReplayIntegration.start(ReplayIntegration.kt:158)
at io.sentry.android.core.LifecycleWatcher.startSession(LifecycleWatcher.java:87)
at io.sentry.android.core.LifecycleWatcher.onForeground(LifecycleWatcher.java:62)
at io.sentry.android.core.AppState$LifecycleObserver.onStart(AppState.java:202)
at androidx.lifecycle.DefaultLifecycleObserverAdapter.onStateChanged(DefaultLifecycleObserverAdapter.kt:25)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.jvm.kt:320)
at androidx.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.jvm.kt:257)
at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.jvm.kt:293)
at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.jvm.kt:142)
at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.jvm.kt:124)
at androidx.lifecycle.ProcessLifecycleOwner.activityStarted$lifecycle_process_release(ProcessLifecycleOwner.kt:97)
at androidx.lifecycle.ProcessLifecycleOwner$attach$1$onActivityPreCreated$1.onActivityPostStarted(ProcessLifecycleOwner.kt:160)
at android.app.Activity.dispatchActivityPostStarted(Activity.java:1718)
at android.app.Activity.performStart(Activity.java:9522)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:4746)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:217)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:197)
at android.app.servertransaction.TransactionExecutor.executeLifecycleItem(TransactionExecutor.java:169)
at android.app.servertransaction.TransactionExecutor.executeTransactionItems(TransactionExecutor.java:104)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:83)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:3103)
at android.os.Handler.dispatchMessage(Handler.java:114)
at android.os.Looper.loopOnce(Looper.java:274)
at android.os.Looper.loop(Looper.java:369)
at android.app.ActivityThread.main(ActivityThread.java:10090)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:616)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1137)
`

Metadata

Metadata

Assignees

No fields configured for issues without a type.

Projects

Status
No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions