Skip to content

deadlock on app relaunch (triggered by device rotation) #196

@0x53A

Description

@0x53A

I need to preface this with that I'm not sure if the bug is here, in winit, or in my own app.

I have a small toy android application which uses egui, winit, android-activity: https://github.com/0x53A/UAS-SigVer

The app works fine when launched in either horizontal or vertical, but crashes when rotated.

Looking through the ANR report, there seems to be a deadlock, triggered by app relaunch. It's not fully clear to me why rotation triggers a relaunch anyway, because the template I'm using (https://github.com/tauri-apps/cargo-mobile2) already defines <activity android:configChanges="orientation|keyboardHidden", but the relaunch can be averted by adding screenSize|screenLayout (https://github.com/tauri-apps/cargo-mobile2/pull/458/files).

Averting the relaunch fixes rotation, but I don't think the app should deadlock on relaunch anyway, so it just hides the symptom.

Here is an excerpt of the two callstacks, the full log is here: 0x53A/UAS-SigVer#1

----- pid 22451 at 2025-05-06 00:42:55.372396957+0200 -----
Cmd line: com.x53a.uas_sigver
Build fingerprint: 'Xiaomi/pyxis_eea/pyxis:11/RKQ1.200826.002/V12.5.3.0.RFCEUXM:user/release-keys'
ABI: 'arm64'
Build type: optimized
Debug Store: 1,0,1037607671::
suspend all histogram:	Sum: 167us 99% C.I. 7us-29us Avg: 12.846us Max: 29us
DALVIK THREADS (19):
"main" prio=5 tid=1 Native
  | group="main" sCount=1 ucsCount=0 flags=1 obj=0x72bc8828 self=0x6efde12380
  | sysTid=22451 nice=-10 cgrp=default sched=0/0 handle=0x6fdce980a0
  | state=S schedstat=( 590665321 91558550 1111 ) utm=44 stm=15 core=5 HZ=100
  | stack=0x7ff294b000-0x7ff294d000 stackSize=8188KB
  | held mutexes=
  native: #00 pc 0007ff4c  /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28) (BuildId: d2b63e277d4fb6976635d39171f71be5)
  native: #01 pc 01447920  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (std::sys::sync::condvar::futex::Condvar::wait::h36588761a73d12e9+112)
  native: #02 pc 01192810  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (std::sync::poison::condvar::Condvar::wait::h1d01febd47439c66+48)
  native: #03 pc 01152e50  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (android_activity::activity_impl::glue::WaitableNativeActivityState::notify_destroyed::ha32a1b9aac6b6587+452)
  native: #04 pc 0115915c  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (android_activity::activity_impl::glue::on_destroy::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::h25efd2a0740ef5be+64)
  native: #05 pc 01157a3c  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (android_activity::activity_impl::glue::try_with_waitable_activity_ref::h9e2515851c93973a+432)
  native: #06 pc 0115906c  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (android_activity::activity_impl::glue::on_destroy::_$u7b$$u7b$closure$u7d$$u7d$::hb6e9a71da5ea1f27+52)
  native: #07 pc 01195064  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (_$LT$core..panic..unwind_safe..AssertUnwindSafe$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$$LP$$RP$$GT$$GT$::call_once::h674bec53079afde7+16)
  native: #08 pc 011962f8  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (std::panicking::try::do_call::hc8575558740f866c+40)
  native: #09 pc 01192748  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (__rust_try+24)
  native: #10 pc 0118ff38  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (std::panic::catch_unwind::he548fcda22bded20+48)
  native: #11 pc 01189c54  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (android_activity::util::abort_on_panic::hec9cd527a0ed0245+16)
  native: #12 pc 01159020  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (android_activity::activity_impl::glue::on_destroy::h0a7a714bc732c254+20)
  native: #13 pc 0010467c  /system/lib64/libandroid_runtime.so (android::NativeCode::~NativeCode+48) (BuildId: 2322557e6de9bc2935568e245609a468)
  native: #14 pc 00103ef4  /system/lib64/libandroid_runtime.so (android::unloadNativeCode_native+24) (BuildId: 2322557e6de9bc2935568e245609a468)
[...]
  at android.app.NativeActivity.onDestroy(NativeActivity.java:198)
[...]
  at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:6276)
  at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:106)
[...]
"Thread-2" prio=10 tid=15 Native
  | group="main" sCount=1 ucsCount=0 flags=1 obj=0x14440678 self=0x6efde481b0
  | sysTid=22474 nice=-10 cgrp=default sched=0/0 handle=0x6d190c3710
  | state=S schedstat=( 64171695081 113185684 5701 ) utm=6295 stm=122 core=6 HZ=100
  | stack=0x6d18ec4000-0x6d18ec6000 stackSize=2045KB
  | held mutexes=
  native: #00 pc 000bda28  /apex/com.android.runtime/lib64/bionic/libc.so (__epoll_pwait+8) (BuildId: d2b63e277d4fb6976635d39171f71be5)
  native: #01 pc 00015abc  /system/lib64/libutils.so (android::Looper::pollAll+232) (BuildId: 3b5fcb253cc00622c9fd2464adbd2aab)
  native: #02 pc 0001df0c  /system/lib64/libandroid.so (ALooper_pollAll+100) (BuildId: d4449b6b5251bcbb324253a7b1fd9eb3)
  native: #03 pc 005ca004  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (android_activity::activity_impl::AndroidAppInner::poll_events::ha523ccab9468a961+676)
  native: #04 pc 005d58e8  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (android_activity::AndroidApp::poll_events::hc8faa7d8c0c02863+376)
  native: #05 pc 007c1d64  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (winit::platform_impl::android::EventLoop$LT$T$GT$::poll_events_with_timeout::h369f8c0d4c866f48+532)
  native: #06 pc 007b7ed4  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (winit::platform_impl::android::EventLoop$LT$T$GT$::pump_events::habfba97826f35aae+204)
  native: #07 pc 007b8094  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (winit::platform_impl::android::EventLoop$LT$T$GT$::run_on_demand::h4cb195aea24d4477+56)
  native: #08 pc 007c23b4  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (winit::platform_impl::android::EventLoop$LT$T$GT$::run::hce9d1c3230e20d23+20)
  native: #09 pc 005dc830  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (winit::event_loop::EventLoop$LT$T$GT$::run_app::hd5c8e1a29b46e777+64)
  native: #10 pc 005ea0e0  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (uas_sigver::_main::h8bb3d57897411549+480)
  native: #11 pc 007b5dc0  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (uas_sigver::android_main::_$u7b$$u7b$closure$u7d$$u7d$::h415ad26d0a164df6+36)
  native: #12 pc 005d5678  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (_$LT$core..panic..unwind_safe..AssertUnwindSafe$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$$LP$$RP$$GT$$GT$::call_once::hd1ddba994bca9ad9+36)
  native: #13 pc 0060f618  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (std::panicking::try::do_call::h73570f4f47564d80+60)
  native: #14 pc 00611e7c  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (__rust_try+24)
  native: #15 pc 00611d6c  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (std::panic::catch_unwind::h8c1c77e1ceb234e1+84)
  native: #16 pc 007b5cec  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (uas_sigver::stop_unwind::h596a23a5ce7b72e5+36)
  native: #17 pc 005ea3dc  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (android_main+460)
  native: #18 pc 0115b5a8  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (android_activity::activity_impl::glue::ANativeActivity_onCreate::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::h5efa3872064905a9+16)
  native: #19 pc 01196400  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (std::panicking::try::do_call::he1f99e3e11bde350+40)
  native: #20 pc 01192748  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (__rust_try+24)
  native: #21 pc 0118f8d4  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (std::panic::catch_unwind::h7c50a2f319ed614a+48)
  native: #22 pc 0115b2b8  /data/app/~~X7jrRRNnLoEuyFBbocVUhQ==/com.x53a.uas_sigver-heXnhgzm_FjkVnMb3gTwTg==/base.apk (offset 8c82000) (android_activity::activity_impl::glue::ANativeActivity_onCreate::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::h467dabaf06f3fed3+520)
[...]

I've created the issue here, because android-activity is at the top of the callstack in both threads (android_activity::activity_impl::AndroidAppInner::poll_events and android_activity::activity_impl::glue::WaitableNativeActivityState::notify_destroyed), but it could just as well be an issue with winit or something else, I haven't yet looked too deep into it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions