Fix thread safety issue when accessing files in beatmap (zip) files.

This commit is contained in:
Dean Herbert
2016-11-05 18:16:15 +09:00
parent 2ee5e2efb7
commit 8fe63689a4
3 changed files with 20 additions and 16 deletions

View File

@ -12,9 +12,12 @@ namespace osu.Game.Beatmaps
{
public class WorkingBeatmap : IDisposable
{
public BeatmapInfo BeatmapInfo;
public readonly BeatmapInfo BeatmapInfo;
public readonly ArchiveReader Reader;
public readonly BeatmapSetInfo BeatmapSetInfo;
private readonly BeatmapDatabase database;
private ArchiveReader reader => database.GetReader(BeatmapSetInfo);
private Beatmap beatmap;
public Beatmap Beatmap
@ -25,7 +28,7 @@ namespace osu.Game.Beatmaps
try
{
using (var stream = new StreamReader(Reader.ReadFile(BeatmapInfo.Path)))
using (var stream = new StreamReader(reader.ReadFile(BeatmapInfo.Path)))
beatmap = BeatmapDecoder.GetDecoder(stream)?.Decode(stream);
}
catch { }
@ -44,7 +47,7 @@ namespace osu.Game.Beatmaps
try
{
var trackData = Reader.ReadFile(BeatmapInfo.Metadata.AudioFile);
var trackData = reader.ReadFile(BeatmapInfo.Metadata.AudioFile);
if (trackData != null)
track = new AudioTrackBass(trackData);
}
@ -55,10 +58,16 @@ namespace osu.Game.Beatmaps
set { track = value; }
}
public WorkingBeatmap(BeatmapInfo beatmapInfo = null, ArchiveReader reader = null)
public WorkingBeatmap(Beatmap beatmap)
{
this.beatmap = beatmap;
}
public WorkingBeatmap(BeatmapInfo beatmapInfo, BeatmapSetInfo beatmapSetInfo, BeatmapDatabase database)
{
this.BeatmapInfo = beatmapInfo;
Reader = reader;
this.BeatmapSetInfo = beatmapSetInfo;
this.database = database;
}
private bool isDisposed;
@ -68,7 +77,7 @@ namespace osu.Game.Beatmaps
if (!isDisposed)
{
track?.Dispose();
Reader?.Dispose();
reader?.Dispose();
isDisposed = true;
}
}