mirror of
https://github.com/FabInfra/capnproto-dotnetcore_Runtime.git
synced 2025-03-12 23:01:44 +01:00
avoid multimodal timing effects
This commit is contained in:
parent
7b16dbd6e9
commit
49c5e80436
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="BenchmarkDotNet" Version="0.12.0" />
|
<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="CapnpC.CSharp.MsBuild.Generation" Version="1.2.138" />
|
||||||
<PackageReference Include="Google.Protobuf" Version="3.11.3" />
|
<PackageReference Include="Google.Protobuf" Version="3.11.3" />
|
||||||
<PackageReference Include="Grpc.Net.Client" Version="2.27.0" />
|
<PackageReference Include="Grpc.Net.Client" Version="2.27.0" />
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<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" />
|
<PackageReference Include="CapnpC.CSharp.MsBuild.Generation" Version="1.2.138" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
@ -5,14 +5,22 @@ namespace Capnp.Util
|
|||||||
{
|
{
|
||||||
internal class DuplexBufferedStream : Stream
|
internal class DuplexBufferedStream : Stream
|
||||||
{
|
{
|
||||||
|
const int DefaultBufferSize = 4096;
|
||||||
|
|
||||||
readonly BufferedStream _readStream;
|
readonly BufferedStream _readStream;
|
||||||
readonly BufferedStream _writeStream;
|
readonly BufferedStream _writeStream;
|
||||||
|
readonly int _bufferSize;
|
||||||
readonly object _reentrancyBlocker = new object();
|
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;
|
public override bool CanRead => true;
|
||||||
@ -51,6 +59,9 @@ namespace Capnp.Util
|
|||||||
|
|
||||||
public override void Write(byte[] buffer, int offset, int count)
|
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);
|
_writeStream.Write(buffer, offset, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user