@@ -340,15 +340,17 @@ private ListenableFuture dispatchRemoteSessionTask(
340
340
SequencedFutureManager .SequencedFuture <SessionResult > result =
341
341
sequencedFutureManager .createSequencedFuture (
342
342
new SessionResult (SessionResult .RESULT_INFO_SKIPPED ));
343
+ int sequenceNumber = result .getSequenceNumber ();
344
+ if (addToPendingMaskingOperations ) {
345
+ pendingMaskingSequencedFutureNumbers .add (sequenceNumber );
346
+ }
343
347
try {
344
- int sequenceNumber = result .getSequenceNumber ();
345
348
task .run (iSession , sequenceNumber );
346
- if (addToPendingMaskingOperations ) {
347
- pendingMaskingSequencedFutureNumbers .add (sequenceNumber );
348
- }
349
349
} catch (RemoteException e ) {
350
350
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 ));
352
354
}
353
355
return result ;
354
356
} else {
@@ -2173,6 +2175,13 @@ private void dispatchRemoteSetVideoSurfaceTaskAndWaitForFuture(@Nullable Surface
2173
2175
// Never happens because future.setException will not be called.
2174
2176
throw new IllegalStateException (e );
2175
2177
} 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
+ }
2176
2185
Log .w (TAG , "set/clearVideoSurface takes too long on the session side." , e );
2177
2186
// TODO(b/188888693): Let developers know the failure in their code.
2178
2187
}
0 commit comments