Prevent read errors on non-existing directories from crashing Shizuku/Root services. - #1860
Merged
Conversation
…/Root services. Propagate exceptions via LocalPathLookupResult to prevent IPC from crashing. Client-side should get ReadException now instead of DeadObjectException. This commit modifies the IPC mechanism for `LocalPathLookup` to also transmit exceptions. It introduces a sealed class `LocalPathLookupResult` which can be either a `Success` (containing the `LocalPathLookup`) or an `Error` (containing exception details). The `LocalPathLookupIPCFlow` is updated to serialize and deserialize `LocalPathLookupResult` instances, allowing exceptions from the producing flow to be re-thrown in the collecting flow. `PathException` and its subclasses are now annotated with `@Keep`.
Member
Author
|
Calling the 2025-06-25T10:09:34.978Z E/SDMSE:FileOps:Service:Host:ADB: toRemoteInputStream failed: eu.darken.sdmse.common.files.ReadException: Does not exist or can't be read <-> /storage/emulated/0/.mixplorer
at com.airbnb.lottie.L.performLookup(Unknown Source:130)
at eu.darken.sdmse.common.files.local.DirectLocalWalker.collectSafely(Unknown Source:118)
at kotlinx.coroutines.flow.AbstractFlow.collect(Unknown Source:68)
at eu.darken.sdmse.common.flow.ChunkedFlowKt$chunked$1.invokeSuspend(Unknown Source:55)
at eu.darken.sdmse.common.flow.ChunkedFlowKt$chunked$1.invoke(Unknown Source:12)
at kotlinx.coroutines.flow.SafeFlow.collectSafely(Unknown Source:2)
at kotlinx.coroutines.flow.AbstractFlow.collect(Unknown Source:68)
at kotlinx.coroutines.flow.FlowKt__MergeKt$flatMapMerge$$inlined$map$1.collect(Unknown Source:15)
at kotlinx.coroutines.flow.FlowKt__EmittersKt$onCompletion$$inlined$unsafeFlow$1.collect(Unknown Source:91)
at kotlinx.coroutines.flow.FlowKt.catchImpl(Unknown Source:70)
at kotlinx.coroutines.flow.FlowKt__MergeKt$flatMapMerge$$inlined$map$1.collect(Unknown Source:358)
at kotlinx.coroutines.flow.FlowKt__CollectKt$launchIn$1.invokeSuspend(Unknown Source:32)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(Unknown Source:8)
at kotlinx.coroutines.DispatchedTask.run(Unknown Source:116)
at com.google.android.gms.tasks.zzi.run(Unknown Source:52)
at kotlinx.coroutines.scheduling.TaskImpl.run(Unknown Source:2)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(Unknown Source:95) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Propagate exceptions via LocalPathLookupResult to prevent IPC from crashing. Client-side should get ReadException now instead of DeadObjectException.
This commit modifies the IPC mechanism for
LocalPathLookupto also transmit exceptions. It introduces a sealed classLocalPathLookupResultwhich can be either aSuccess(containing theLocalPathLookup) or anError(containing exception details).The
LocalPathLookupIPCFlowis updated to serialize and deserializeLocalPathLookupResultinstances, allowing exceptions from the producing flow to be re-thrown in the collecting flow.PathExceptionand its subclasses are now annotated with@Keep.