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;