summaryrefslogtreecommitdiff
path: root/app/src/main/java/org/terst/feedreader/ui/LinkReaderScreen.kt
diff options
context:
space:
mode:
authorPeter Stone <thepeterstone@gmail.com>2026-07-22 17:17:40 +0000
committerPeter Stone <thepeterstone@gmail.com>2026-07-22 17:17:40 +0000
commit6d9c200dbd85a3be177d6bb7cac33fba5662ac95 (patch)
tree226db6d14159903e58882d155756071d3e3c0cc8 /app/src/main/java/org/terst/feedreader/ui/LinkReaderScreen.kt
parent39cca1cb3650edb066f57d0891b1873b767b1c43 (diff)
Fix crash loop: WebView touched off main thread during extraction cancellation
Root-caused via emulator stress test (rapid swiping through many articles): withTimeoutOrNull's cancellation, and LaunchedEffect disposal when a page is swiped away, both invoke invokeOnCancellation on kotlinx.coroutines.DefaultExecutor rather than the calling coroutine's Main dispatcher. The handler called webView.stopLoading()/destroy() directly, crashing with "A WebView method was called on thread ..." on essentially every session once enough thin-content articles were swiped past mid-extraction -- the reported crash loop. Now hops back to the main looper before touching the WebView, and guards against a double destroy() race between the JS-callback and cancellation paths. Also fixed a real (non-crashing) leak: the visible reader WebView in ReaderScreen was never destroy()-ed when its page left the pager, via AndroidView's onRelease. Reproduced pre-fix in ~80 rapid swipes on an emulator; post-fix, 320+ swipes with real 107-feed data ran clean with stable native heap.
Diffstat (limited to 'app/src/main/java/org/terst/feedreader/ui/LinkReaderScreen.kt')
0 files changed, 0 insertions, 0 deletions