Skip to content
Snippets Groups Projects
Commit 13d1abf4 authored by Jan Tattermusch's avatar Jan Tattermusch
Browse files

improve unary call response handler

parent 6b1afe1a
No related branches found
No related tags found
No related merge requests found
...@@ -407,12 +407,15 @@ namespace Grpc.Core.Internal ...@@ -407,12 +407,15 @@ namespace Grpc.Core.Internal
/// <summary> /// <summary>
/// Handler for unary response completion. /// Handler for unary response completion.
/// </summary> /// </summary>
private void HandleUnaryResponse(bool success, ClientSideStatus receivedStatus, byte[] receivedMessage, Metadata responseHeaders) private void HandleUnaryResponse(bool sucess, ClientSideStatus receivedStatus, byte[] receivedMessage, Metadata responseHeaders)
{ {
// NOTE: because this event is a result of batch containing GRPC_OP_RECV_STATUS_ON_CLIENT,
// success will be always set to true.
using (Profilers.ForCurrentThread().NewScope("AsyncCall.HandleUnaryResponse")) using (Profilers.ForCurrentThread().NewScope("AsyncCall.HandleUnaryResponse"))
{ {
TResponse msg = default(TResponse); TResponse msg = default(TResponse);
var deserializeException = success ? TryDeserialize(receivedMessage, out msg) : null; var deserializeException = TryDeserialize(receivedMessage, out msg);
lock (myLock) lock (myLock)
{ {
...@@ -425,14 +428,13 @@ namespace Grpc.Core.Internal ...@@ -425,14 +428,13 @@ namespace Grpc.Core.Internal
finishedStatus = receivedStatus; finishedStatus = receivedStatus;
ReleaseResourcesIfPossible(); ReleaseResourcesIfPossible();
} }
responseHeadersTcs.SetResult(responseHeaders); responseHeadersTcs.SetResult(responseHeaders);
var status = receivedStatus.Status; var status = receivedStatus.Status;
if (!success || status.StatusCode != StatusCode.OK) if (status.StatusCode != StatusCode.OK)
{ {
unaryResponseTcs.SetException(new RpcException(status)); unaryResponseTcs.SetException(new RpcException(status));
return; return;
...@@ -447,6 +449,9 @@ namespace Grpc.Core.Internal ...@@ -447,6 +449,9 @@ namespace Grpc.Core.Internal
/// </summary> /// </summary>
private void HandleFinished(bool success, ClientSideStatus receivedStatus) private void HandleFinished(bool success, ClientSideStatus receivedStatus)
{ {
// NOTE: because this event is a result of batch containing GRPC_OP_RECV_STATUS_ON_CLIENT,
// success will be always set to true.
lock (myLock) lock (myLock)
{ {
finished = true; finished = true;
...@@ -457,7 +462,7 @@ namespace Grpc.Core.Internal ...@@ -457,7 +462,7 @@ namespace Grpc.Core.Internal
var status = receivedStatus.Status; var status = receivedStatus.Status;
if (!success || status.StatusCode != StatusCode.OK) if (status.StatusCode != StatusCode.OK)
{ {
streamingCallFinishedTcs.SetException(new RpcException(status)); streamingCallFinishedTcs.SetException(new RpcException(status));
return; return;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment