diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs index 07e88af517..417e289b65 100644 --- a/osu.Game/Beatmaps/WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/WorkingBeatmap.cs @@ -21,60 +21,72 @@ namespace osu.Game.Beatmaps private ArchiveReader reader => database.GetReader(BeatmapSetInfo); private Texture background; + private object backgroundLock = new object(); public Texture Background { get { - if (background != null) return background; - - try + lock (backgroundLock) { - background = new TextureStore(new RawTextureLoaderStore(reader)).Get(BeatmapInfo.Metadata.BackgroundFile); - } - catch { } + if (background != null) return background; - return background; + try + { + background = new TextureStore(new RawTextureLoaderStore(reader)).Get(BeatmapInfo.Metadata.BackgroundFile); + } + catch { } + + return background; + } } - set { background = value; } + set { lock (backgroundLock) background = value; } } private Beatmap beatmap; + private object beatmapLock = new object(); public Beatmap Beatmap { get { - if (beatmap != null) return beatmap; - - try + lock (beatmapLock) { - using (var stream = new StreamReader(reader.GetStream(BeatmapInfo.Path))) - beatmap = BeatmapDecoder.GetDecoder(stream)?.Decode(stream); - } - catch { } + if (beatmap != null) return beatmap; - return beatmap; + try + { + using (var stream = new StreamReader(reader.GetStream(BeatmapInfo.Path))) + beatmap = BeatmapDecoder.GetDecoder(stream)?.Decode(stream); + } + catch { } + + return beatmap; + } } - set { beatmap = value; } + set { lock (beatmapLock) beatmap = value; } } private AudioTrack track; + private object trackLock = new object(); public AudioTrack Track { get { - if (track != null) return track; - - try + lock (trackLock) { - var trackData = reader.GetStream(BeatmapInfo.Metadata.AudioFile); - if (trackData != null) - track = new AudioTrackBass(trackData); - } - catch { } + if (track != null) return track; - return track; + try + { + var trackData = reader.GetStream(BeatmapInfo.Metadata.AudioFile); + if (trackData != null) + track = new AudioTrackBass(trackData); + } + catch { } + + return track; + } } - set { track = value; } + set { lock (trackLock) track = value; } } public WorkingBeatmap(Beatmap beatmap)