Skip to content

Commit 920f063

Browse files
authored
Merge pull request #9 from xledger/fixes
Revert incorrect "fix" and improve test.
2 parents 1313557 + bb7db00 commit 920f063

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

Xledger.Collections.Test/TestMemoryOwner.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,19 @@ public void TestSlice() {
2626
#if NET
2727
[Fact]
2828
public void TestStream_ToMemoryOwner() {
29-
byte[] array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
29+
// This length should be larger than the default GetCopyBufferSize.
30+
byte[] array = new byte[4 * 1024 * 1024 + 3];
31+
new Random().NextBytes(array);
3032
var ms = new MemoryStream(array);
3133
using var memoryOwner = ms.ToOwnedMemory();
3234
Assert.Equal(array.AsMemory(), memoryOwner.Memory);
3335
}
3436

3537
[Fact]
3638
public async Task TestStream_ToMemoryOwnerAsync() {
37-
byte[] array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
39+
// This length should be larger than the default GetCopyBufferSize.
40+
byte[] array = new byte[4 * 1024 * 1024 + 3];
41+
new Random().NextBytes(array);
3842
var ms = new MemoryStream(array);
3943
using var memoryOwner = await ms.ToOwnedMemoryAsync();
4044
Assert.Equal(array.AsMemory(), memoryOwner.Memory);

Xledger.Collections/Memory/Extensions.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ public static IMemoryOwner<byte> ToOwnedMemory(this Stream source, bool leaveOpe
3838

3939
try {
4040
while (true) {
41-
int bytesRead = source.Read(currentBuffer.Span);
41+
var dest = currentBuffer.Slice(totalBytesRead);
42+
43+
int bytesRead = source.Read(dest.Span);
4244

4345
if (bytesRead == 0) {
4446
break;
@@ -100,7 +102,9 @@ public static async Task<IMemoryOwner<byte>> ToOwnedMemoryAsync(this Stream sour
100102
while (true) {
101103
tok.ThrowIfCancellationRequested();
102104

103-
int bytesRead = await source.ReadAsync(currentBuffer, tok).ConfigureAwait(false);
105+
var dest = currentBuffer.Slice(totalBytesRead);
106+
107+
int bytesRead = await source.ReadAsync(dest, tok).ConfigureAwait(false);
104108

105109
if (bytesRead == 0) {
106110
break;

0 commit comments

Comments
 (0)