address comments

pull/16367/head
Jan Tattermusch 7 years ago
parent 1044731858
commit c2fd689bad
  1. 7
      src/csharp/Grpc.Core/Marshaller.cs

@ -57,6 +57,8 @@ namespace Grpc.Core
{ {
this.contextualSerializer = GrpcPreconditions.CheckNotNull(serializer, nameof(serializer)); this.contextualSerializer = GrpcPreconditions.CheckNotNull(serializer, nameof(serializer));
this.contextualDeserializer = GrpcPreconditions.CheckNotNull(deserializer, nameof(deserializer)); 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.serializer = EmulateSimpleSerializer;
this.deserializer = EmulateSimpleDeserializer; this.deserializer = EmulateSimpleDeserializer;
} }
@ -87,6 +89,7 @@ namespace Grpc.Core
private byte[] EmulateSimpleSerializer(T msg) private byte[] EmulateSimpleSerializer(T msg)
{ {
// TODO(jtattermusch): avoid the allocation by passing a thread-local instance // 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(); var context = new EmulatedSerializationContext();
this.contextualSerializer(msg, context); this.contextualSerializer(msg, context);
return context.GetPayload(); return context.GetPayload();
@ -96,6 +99,7 @@ namespace Grpc.Core
private T EmulateSimpleDeserializer(byte[] payload) private T EmulateSimpleDeserializer(byte[] payload)
{ {
// TODO(jtattermusch): avoid the allocation by passing a thread-local instance // 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); var context = new EmulatedDeserializationContext(payload);
return this.contextualDeserializer(context); return this.contextualDeserializer(context);
} }
@ -134,6 +138,7 @@ namespace Grpc.Core
internal class EmulatedDeserializationContext : DeserializationContext internal class EmulatedDeserializationContext : DeserializationContext
{ {
readonly byte[] payload; readonly byte[] payload;
bool alreadyCalledPayloadAsNewBuffer;
public EmulatedDeserializationContext(byte[] payload) public EmulatedDeserializationContext(byte[] payload)
{ {
@ -144,6 +149,8 @@ namespace Grpc.Core
public override byte[] PayloadAsNewBuffer() public override byte[] PayloadAsNewBuffer()
{ {
GrpcPreconditions.CheckState(!alreadyCalledPayloadAsNewBuffer);
alreadyCalledPayloadAsNewBuffer = true;
return payload; return payload;
} }
} }

Loading…
Cancel
Save