1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-22 05:27:23 +08:00

Merge pull request #1249 from peppy/workingbeatmap-track-disposal

Improve beatmap track disposal logic
This commit is contained in:
Dean Herbert 2017-09-12 19:08:19 +09:00 committed by GitHub
commit 09bb5f3c54
3 changed files with 21 additions and 5 deletions

@ -1 +1 @@
Subproject commit 1b479fb947da193f099df062f696b3a6164da9e0
Subproject commit 1a259925b82c31ddcebf7b330a6ef9d3a9daf089

View File

@ -109,10 +109,17 @@ namespace osu.Game.Beatmaps
public virtual void Dispose()
{
track?.Dispose();
track = null;
background?.Dispose();
background = null;
}
public void DisposeTrack()
{
lock (trackLock)
{
track?.Dispose();
track = null;
}
}
}
}

View File

@ -152,10 +152,19 @@ namespace osu.Game
Beatmap.ValueChanged += b =>
{
var trackLoaded = lastBeatmap?.TrackLoaded ?? false;
// compare to last beatmap as sometimes the two may share a track representation (optimisation, see WorkingBeatmap.TransferTo)
if (lastBeatmap?.Track != b.Track)
if (!trackLoaded || lastBeatmap?.Track != b.Track)
{
lastBeatmap?.Track?.Dispose();
if (trackLoaded)
{
Debug.Assert(lastBeatmap != null);
Debug.Assert(lastBeatmap.Track != null);
lastBeatmap.DisposeTrack();
}
Audio.Track.AddItem(b.Track);
}