Guard against Gio's null-view detach event (recents-wipe SIGABRT) #1
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "fix/recents-wipe-jni-null-view"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Gio's
GioView.onDestroyViewsendsViewEvent{View: 0}as its detach signal when the view is destroyed - i.e. the activity going away on a recents-wipe. An app that forwards the event toEnable()passes a zero view through toregisterFragment, whoseGetObjectClass(null)aborts the process:Reproduced on a Pixel 9 Pro (Android 17) with the equivalent app (pad): swiping the app away in recents crashes it. The pinned gio version (2020-08) sends the same empty
ViewEvent{View: 0}fromJava_org_gioui_GioView_onDestroyView.Enable()now returns early on a zero view so all callers are covered even if they forward the event unfiltered, andregisterFragmentnull-checks as defense in depth. Note: any app that also uses the view ref for other JNI calls should apply the sameView == 0check in its own event handler.Same fix as pad (gmp/pad@fdbffc9), verified there on-device: recents swipe closes cleanly, no tombstone.
Gio's GioView.onDestroyView sends ViewEvent{View: 0} as its detach signal when the view is destroyed — i.e. the activity going away on a recents-wipe. An app that forwards the event to Enable() passes a zero view through to registerFragment, whose GetObjectClass(null) aborts the process (JNI DETECTED ERROR: java_object == null in call to GetObjectClass). Enable() now returns early on a zero view so all callers are covered even if they forward the event unfiltered, and registerFragment null-checks as defense in depth. Same fix as pad (fdbffc9); verified there on a Pixel 9 Pro / Android 17 where the recents swipe used to crash the app.Pull request closed