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;