aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/csharp
diff options
context:
space:
mode:
authorGravatar Jan Tattermusch <jtattermusch@google.com>2018-09-25 23:02:42 +0200
committerGravatar Jan Tattermusch <jtattermusch@google.com>2018-09-25 23:02:42 +0200
commitc2fd689bad731f30b2ab43a5613e164f7e44be5c (patch)
tree93a722c60a7f85cbbcd30e158742a851446f9e63 /src/csharp
parent10447318588a281d737af159a5dceec142135a43 (diff)
address comments
Diffstat (limited to 'src/csharp')
-rw-r--r--src/csharp/Grpc.Core/Marshaller.cs7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/csharp/Grpc.Core/Marshaller.cs b/src/csharp/Grpc.Core/Marshaller.cs
index 7f010dc419..0af9aa586b 100644
--- a/src/csharp/Grpc.Core/Marshaller.cs
+++ b/src/csharp/Grpc.Core/Marshaller.cs
@@ -57,6 +57,8 @@ namespace Grpc.Core
{
this.contextualSerializer = GrpcPreconditions.CheckNotNull(serializer, nameof(serializer));
this.contextualDeserializer = GrpcPreconditions.CheckNotNull(deserializer, nameof(deserializer));
+ // TODO(jtattermusch): once gRPC C# library switches to using contextual (de)serializer,
+ // emulating the simple (de)serializer will become unnecessary.
this.serializer = EmulateSimpleSerializer;
this.deserializer = EmulateSimpleDeserializer;
}
@@ -87,6 +89,7 @@ namespace Grpc.Core
private byte[] EmulateSimpleSerializer(T msg)
{
// TODO(jtattermusch): avoid the allocation by passing a thread-local instance
+ // This code will become unnecessary once gRPC C# library switches to using contextual (de)serializer.
var context = new EmulatedSerializationContext();
this.contextualSerializer(msg, context);
return context.GetPayload();
@@ -96,6 +99,7 @@ namespace Grpc.Core
private T EmulateSimpleDeserializer(byte[] payload)
{
// TODO(jtattermusch): avoid the allocation by passing a thread-local instance
+ // This code will become unnecessary once gRPC C# library switches to using contextual (de)serializer.
var context = new EmulatedDeserializationContext(payload);
return this.contextualDeserializer(context);
}
@@ -134,6 +138,7 @@ namespace Grpc.Core
internal class EmulatedDeserializationContext : DeserializationContext
{
readonly byte[] payload;
+ bool alreadyCalledPayloadAsNewBuffer;
public EmulatedDeserializationContext(byte[] payload)
{
@@ -144,6 +149,8 @@ namespace Grpc.Core
public override byte[] PayloadAsNewBuffer()
{
+ GrpcPreconditions.CheckState(!alreadyCalledPayloadAsNewBuffer);
+ alreadyCalledPayloadAsNewBuffer = true;
return payload;
}
}