Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/aspnet/MessagePack-CSharp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/MessagePack.UnityClient/Assets/Scripts/MessagePack/MessagePackStreamReader.cs')
-rw-r--r--src/MessagePack.UnityClient/Assets/Scripts/MessagePack/MessagePackStreamReader.cs42
1 files changed, 36 insertions, 6 deletions
diff --git a/src/MessagePack.UnityClient/Assets/Scripts/MessagePack/MessagePackStreamReader.cs b/src/MessagePack.UnityClient/Assets/Scripts/MessagePack/MessagePackStreamReader.cs
index fb439ddc..2c29bc28 100644
--- a/src/MessagePack.UnityClient/Assets/Scripts/MessagePack/MessagePackStreamReader.cs
+++ b/src/MessagePack.UnityClient/Assets/Scripts/MessagePack/MessagePackStreamReader.cs
@@ -21,7 +21,7 @@ namespace MessagePack
{
private readonly Stream stream;
private readonly bool leaveOpen;
- private SequencePool.Rental sequenceRental = SequencePool.Shared.Rent();
+ private SequencePool.Rental sequenceRental;
private SequencePosition? endOfLastMessage;
/// <summary>
@@ -39,9 +39,26 @@ namespace MessagePack
/// <param name="stream">The stream to read from.</param>
/// <param name="leaveOpen">If true, leaves the stream open after this <see cref="MessagePackStreamReader"/> is disposed; otherwise, false.</param>
public MessagePackStreamReader(Stream stream, bool leaveOpen)
+ : this(stream, leaveOpen, SequencePool.Shared)
{
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="MessagePackStreamReader"/> class.
+ /// </summary>
+ /// <param name="stream">The stream to read from.</param>
+ /// <param name="leaveOpen">If true, leaves the stream open after this <see cref="MessagePackStreamReader"/> is disposed; otherwise, false.</param>
+ /// <param name="sequencePool">The pool to rent a <see cref="Sequence{T}"/> object from.</param>
+ public MessagePackStreamReader(Stream stream, bool leaveOpen, SequencePool sequencePool)
+ {
+ if (sequencePool == null)
+ {
+ throw new ArgumentNullException(nameof(sequencePool));
+ }
+
this.stream = stream ?? throw new ArgumentNullException(nameof(stream));
this.leaveOpen = leaveOpen;
+ this.sequenceRental = sequencePool.Rent();
}
/// <summary>
@@ -107,13 +124,26 @@ namespace MessagePack
/// <inheritdoc/>
public void Dispose()
{
- if (!this.leaveOpen)
+ this.Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ /// <summary>
+ /// Disposes of managed and unmanaged resources.
+ /// </summary>
+ /// <param name="disposing"><see langword="true"/> if this instance is being disposed; <see langword="false"/> if it is being finalized.</param>
+ protected virtual void Dispose(bool disposing)
+ {
+ if (disposing)
{
- this.stream.Dispose();
- }
+ if (!this.leaveOpen)
+ {
+ this.stream.Dispose();
+ }
- this.sequenceRental.Dispose();
- this.sequenceRental = default;
+ this.sequenceRental.Dispose();
+ this.sequenceRental = default;
+ }
}
/// <summary>