avoid multimodal timing effects

This commit is contained in:
Christian Köllner 2020-02-22 22:06:23 +01:00
parent 7b16dbd6e9
commit 49c5e80436
3 changed files with 16 additions and 5 deletions

View File

@ -7,7 +7,7 @@
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.12.0" />
<PackageReference Include="Capnp.Net.Runtime" Version="1.3.23-g5e71ce69c5" />
<PackageReference Include="Capnp.Net.Runtime" Version="1.3.31-g7b16dbd6e9" />
<PackageReference Include="CapnpC.CSharp.MsBuild.Generation" Version="1.2.138" />
<PackageReference Include="Google.Protobuf" Version="3.11.3" />
<PackageReference Include="Grpc.Net.Client" Version="2.27.0" />

View File

@ -6,7 +6,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Capnp.Net.Runtime" Version="1.3.23-g5e71ce69c5" />
<PackageReference Include="Capnp.Net.Runtime" Version="1.3.31-g7b16dbd6e9" />
<PackageReference Include="CapnpC.CSharp.MsBuild.Generation" Version="1.2.138" />
</ItemGroup>

View File

@ -5,14 +5,22 @@ namespace Capnp.Util
{
internal class DuplexBufferedStream : Stream
{
const int DefaultBufferSize = 4096;
readonly BufferedStream _readStream;
readonly BufferedStream _writeStream;
readonly int _bufferSize;
readonly object _reentrancyBlocker = new object();
public DuplexBufferedStream(Stream stream)
public DuplexBufferedStream(Stream stream, int bufferSize)
{
_readStream = new BufferedStream(stream, bufferSize);
_writeStream = new BufferedStream(stream, bufferSize);
_bufferSize = bufferSize;
}
public DuplexBufferedStream(Stream stream): this(stream, DefaultBufferSize)
{
_readStream = new BufferedStream(stream);
_writeStream = new BufferedStream(stream);
}
public override bool CanRead => true;
@ -51,6 +59,9 @@ namespace Capnp.Util
public override void Write(byte[] buffer, int offset, int count)
{
if (buffer.Length > _bufferSize) // avoid moiré-like timing effects
_writeStream.Flush();
_writeStream.Write(buffer, offset, count);
}