Skip to content

v1.1.9

Choose a tag to compare

@oznetmaster oznetmaster released this 13 Jul 10:07

Fix TpapTransport still absorbing an internal per-request timeout after the 1.1.8 fix: ShouldRetryLiveSession no longer treats TaskCanceledException/OperationCanceledException as retryable, but it still treated IOException/HttpRequestException messages containing "operation has been aborted" as retryable so genuine transport resets could recover. However, when SendOnceAsync's internal per-request timeout (CreateOperationTimeoutSource, separate from the caller's outer CancellationToken) elapses, SocketsHttpHandler aborts the socket and throws that exact same IOException/HttpRequestException shape rather than an OperationCanceledException, so the internal timeout was still misclassified as a retryable transport reset -- triggering Reset() plus a full, non-cancellable PAKE handshake instead of propagating the timeout. SendOnceAsync, PostLoginAsync, and SendKeepAliveCoreAsync now detect when the internal operation token (not the caller's outer token) has fired and translate any resulting exception into an OperationCanceledException before ShouldRetryLiveSession is consulted, so an internal timeout always propagates immediately while genuine transport resets observed before the timeout still retry as before. Added unit tests (TpapTransportRetryPolicyTests) covering ShouldRetryLiveSession's retry classification and the timeout-to-cancellation translation.

Full Changelog: v1.1.8...v1.1.9