github igorcv88/Root-My-Galaxy-Extended v0.3.52
Root My Galaxy 0.3.52

latest releases: v0.3.104, v0.3.103, v0.3.102...
one month ago

Root My Galaxy 0.3.52

SHA-256: b88564fc2065d0fab6d78e6cd58184bb202083aa6ff2ccb1fa29b6b91840eeeb

Changes since v0.3.51.

What's changed

  • #42 Fix install lifecycle races and Shizuku permission hangs

Full changelog

Detailed pull-request notes for all changes included in this release.

#42 — Fix install lifecycle races and Shizuku permission hangs

Problem

A manual Shizuku install could appear frozen at Support profile: ... even while the install coroutine continued in the background. The initial refresh() performs native/network work; coroutine cancellation is cooperative, so a late return could still publish Ready/Support profile after install() had already started. A second issue allowed requestPermission() to suspend indefinitely if the Shizuku permission callback was lost.

Fixes

  • Add InstallDiscoveryGate, a synchronized generation gate that serializes discovery-state publication against install startup.
  • refresh() now catches probe/discovery failures explicitly, rethrows CancellationException, checks cancellation after blocking work, and can publish UI state only while its generation remains current.
  • install() invalidates/cancels discovery both before startup and once its active Job is visible, covering the tiny assignment race as well.
  • install() checks cancellation after blocking history/repository work and no longer converts coroutine cancellation into a normal install failure.
  • Shizuku permission waiting is bounded to 30 seconds. If the callback times out, the app performs one final active Binder permission refresh and accepts an already-granted permission; otherwise it fails explicitly instead of hanging forever.
  • Add unit coverage for stale discovery invalidation.

Scope / safety

No payload code changed. No changes to CZG3 60 ms FOPS timing, 120 s uptime gate, P0, offsets, retries, cache-gate retry, observer, mutation handling, or fail-closed behavior. No workflow files changed.

Validation

  • Reviewed the complete PR diff against main.
  • InstallDiscoveryGate compiled locally with kotlinc.
  • Verified against kotlinx.coroutines 1.11 API that the permission bridge uses the public cancellation-safe resume/resumeWithException path; no InternalCoroutinesApi is used.
  • Full Android/Gradle build was not run in this environment because there is no usable repository checkout/Android dependency set here.
  • No GitHub Actions workflow was created, modified, or triggered.

Don't miss a new Root-My-Galaxy-Extended release

NewReleases is sending notifications on new releases.