Skip to content

Commit 4adfb5f

Browse files
marcbaechingermicrokatz
authored andcommitted
Add pending sequence before sending the remote session task
#minor-release PiperOrigin-RevId: 488885069 (cherry picked from commit e1eb8b6)
1 parent 8cc37db commit 4adfb5f

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

libraries/session/src/main/java/androidx/media3/session/MediaBrowserImplBase.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,8 @@ private ListenableFuture> dispatchRemoteLibrarySessionTask(
194194
task.run(iSession, result.getSequenceNumber());
195195
} catch (RemoteException e) {
196196
Log.w(TAG, "Cannot connect to the service or the session is gone", e);
197-
result.set(LibraryResult.ofError(RESULT_ERROR_SESSION_DISCONNECTED));
197+
sequencedFutureManager.setFutureResult(
198+
result.getSequenceNumber(), LibraryResult.ofError(RESULT_ERROR_SESSION_DISCONNECTED));
198199
}
199200
return result;
200201
} else {

libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -340,15 +340,17 @@ private ListenableFuture dispatchRemoteSessionTask(
340340
SequencedFutureManager.SequencedFuture<SessionResult> result =
341341
sequencedFutureManager.createSequencedFuture(
342342
new SessionResult(SessionResult.RESULT_INFO_SKIPPED));
343+
int sequenceNumber = result.getSequenceNumber();
344+
if (addToPendingMaskingOperations) {
345+
pendingMaskingSequencedFutureNumbers.add(sequenceNumber);
346+
}
343347
try {
344-
int sequenceNumber = result.getSequenceNumber();
345348
task.run(iSession, sequenceNumber);
346-
if (addToPendingMaskingOperations) {
347-
pendingMaskingSequencedFutureNumbers.add(sequenceNumber);
348-
}
349349
} catch (RemoteException e) {
350350
Log.w(TAG, "Cannot connect to the service or the session is gone", e);
351-
result.set(new SessionResult(SessionResult.RESULT_ERROR_SESSION_DISCONNECTED));
351+
pendingMaskingSequencedFutureNumbers.remove(sequenceNumber);
352+
sequencedFutureManager.setFutureResult(
353+
sequenceNumber, new SessionResult(SessionResult.RESULT_ERROR_SESSION_DISCONNECTED));
352354
}
353355
return result;
354356
} else {
@@ -2173,6 +2175,13 @@ private void dispatchRemoteSetVideoSurfaceTaskAndWaitForFuture(@Nullable Surface
21732175
// Never happens because future.setException will not be called.
21742176
throw new IllegalStateException(e);
21752177
} catch (TimeoutException e) {
2178+
if (future instanceof SequencedFutureManager.SequencedFuture) {
2179+
int sequenceNumber =
2180+
((SequencedFutureManager.SequencedFuture<SessionResult>) future).getSequenceNumber();
2181+
pendingMaskingSequencedFutureNumbers.remove(sequenceNumber);
2182+
sequencedFutureManager.setFutureResult(
2183+
sequenceNumber, new SessionResult(SessionResult.RESULT_ERROR_UNKNOWN));
2184+
}
21762185
Log.w(TAG, "set/clearVideoSurface takes too long on the session side.", e);
21772186
// TODO(b/188888693): Let developers know the failure in their code.
21782187
}

0 commit comments

Comments
 (0)