### Version Media3 main branch ### More version details _No response_ ### Devices that reproduce the issue pixel 9 ### Devices that do not reproduce the issue _No response_ ### Reproducible in the demo app? No ### Reproduction steps In the getSegmentIndex method DashDownloader, a RunnableFutureTask is created and passed into SegmentDownloader’s `protected final <T> T execute(RunnableFutureTask<T, ?> runnable, boolean removing)` Inside the execute method there is a while(true) loop. If the task throws an exception once (e.g., PriorityTooLowException), the loop becomes infinite even after RunnableFutureTask later completes successfully, because runnable.get() will always return the previously stored exception instead of the new result. RunnableFutureTask.getResult method: ``` private R getResult() throws ExecutionException { if (canceled) { throw new CancellationException(); } else if (exception != null) { throw new ExecutionException(exception); } return result; } ``` The exception in RunnableFutureTask is never cleared. - [ ] You will email the zip file produced by `adb bugreport` to android-media-github@google.com after filing this issue.