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.handleEventpassed that zero straight through toInitPgp/registerFragment, 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 versions (2020-08) send the same empty
ViewEvent{View: 0}fromJava_org_gioui_GioView_onDestroyView.Guard on both sides:
cmd/passgo-gui:handleEventignores theView == 0detach signal (a re-attach arrives as a fresh event with a live view).InitPgpreturns early on a zero view, so callers that forward the event unfiltered are covered.registerFragmentnull-checks as defense in depth.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. handleEvent passed that zero straight through to InitPgp/registerFragment, whose GetObjectClass(null) aborts the process (JNI DETECTED ERROR: java_object == null in call to GetObjectClass). Guard on both sides: handleEvent ignores the View == 0 detach signal (a re-attach arrives as a fresh event with a live view), InitPgp returns early on a zero view so unfiltered callers are covered, 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