1
0
mirror of https://github.com/ppy/osu.git synced 2025-03-28 01:47:33 +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() public virtual void Dispose()
{ {
track?.Dispose();
track = null;
background?.Dispose(); background?.Dispose();
background = null; background = null;
} }
public void DisposeTrack()
{
lock (trackLock)
{
track?.Dispose();
track = null;
}
}
} }
} }

View File

@ -152,10 +152,19 @@ namespace osu.Game
Beatmap.ValueChanged += b => 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) // 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); Audio.Track.AddItem(b.Track);
} }