From f96fd17fd3b63256ce7b69c2614b17a9c87e3c48 Mon Sep 17 00:00:00 2001
From: TheRogueArchivist <24215969+TheRogueArchivist@users.noreply.github.com>
Date: Mon, 27 May 2024 15:36:04 -0600
Subject: [PATCH] Add lock for reading data from stream
---
.../Wrappers/WrapperBaseT.cs | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/SabreTools.Serialization/Wrappers/WrapperBaseT.cs b/SabreTools.Serialization/Wrappers/WrapperBaseT.cs
index e2f17a12..eca99437 100644
--- a/SabreTools.Serialization/Wrappers/WrapperBaseT.cs
+++ b/SabreTools.Serialization/Wrappers/WrapperBaseT.cs
@@ -29,6 +29,11 @@ namespace SabreTools.Serialization.Wrappers
///
protected DataSource _dataSource = DataSource.UNKNOWN;
+ ///
+ /// Lock object for reading from the source
+ ///
+ private readonly object _streamDataLock = new();
+
///
/// Source byte array data
///
@@ -193,11 +198,14 @@ namespace SabreTools.Serialization.Wrappers
break;
case DataSource.Stream:
- long currentLocation = _streamData!.Position;
- _streamData.Seek(position, SeekOrigin.Begin);
- sectionData = _streamData.ReadBytes(length);
- _streamData.Seek(currentLocation, SeekOrigin.Begin);
- break;
+ lock (_streamDataLock)
+ {
+ long currentLocation = _streamData!.Position;
+ _streamData.Seek(position, SeekOrigin.Begin);
+ sectionData = _streamData.ReadBytes(length);
+ _streamData.Seek(currentLocation, SeekOrigin.Begin);
+ break;
+ }
}
return sectionData;