Add pending sequence before sending the remote session task

#minor-release

PiperOrigin-RevId: 488885069
This commit is contained in:
bachinger 2022-11-16 10:36:48 +00:00 committed by microkatz
parent cfe36af847
commit e1eb8b6dd8
2 changed files with 16 additions and 6 deletions

View file

@ -194,7 +194,8 @@ import org.checkerframework.checker.initialization.qual.UnderInitialization;
task.run(iSession, result.getSequenceNumber());
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to the service or the session is gone", e);
result.set(LibraryResult.ofError(RESULT_ERROR_SESSION_DISCONNECTED));
sequencedFutureManager.setFutureResult(
result.getSequenceNumber(), LibraryResult.ofError(RESULT_ERROR_SESSION_DISCONNECTED));
}
return result;
} else {

View file

@ -340,15 +340,17 @@ import org.checkerframework.checker.nullness.qual.NonNull;
SequencedFutureManager.SequencedFuture<SessionResult> result =
sequencedFutureManager.createSequencedFuture(
new SessionResult(SessionResult.RESULT_INFO_SKIPPED));
int sequenceNumber = result.getSequenceNumber();
if (addToPendingMaskingOperations) {
pendingMaskingSequencedFutureNumbers.add(sequenceNumber);
}
try {
int sequenceNumber = result.getSequenceNumber();
task.run(iSession, sequenceNumber);
if (addToPendingMaskingOperations) {
pendingMaskingSequencedFutureNumbers.add(sequenceNumber);
}
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to the service or the session is gone", e);
result.set(new SessionResult(SessionResult.RESULT_ERROR_SESSION_DISCONNECTED));
pendingMaskingSequencedFutureNumbers.remove(sequenceNumber);
sequencedFutureManager.setFutureResult(
sequenceNumber, new SessionResult(SessionResult.RESULT_ERROR_SESSION_DISCONNECTED));
}
return result;
} else {
@ -2173,6 +2175,13 @@ import org.checkerframework.checker.nullness.qual.NonNull;
// Never happens because future.setException will not be called.
throw new IllegalStateException(e);
} catch (TimeoutException e) {
if (future instanceof SequencedFutureManager.SequencedFuture) {
int sequenceNumber =
((SequencedFutureManager.SequencedFuture<SessionResult>) future).getSequenceNumber();
pendingMaskingSequencedFutureNumbers.remove(sequenceNumber);
sequencedFutureManager.setFutureResult(
sequenceNumber, new SessionResult(SessionResult.RESULT_ERROR_UNKNOWN));
}
Log.w(TAG, "set/clearVideoSurface takes too long on the session side.", e);
// TODO(b/188888693): Let developers know the failure in their code.
}