diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs
index e62fd2fc5d..16a1268e88 100644
--- a/osu.Game/Beatmaps/BeatmapManager.cs
+++ b/osu.Game/Beatmaps/BeatmapManager.cs
@@ -102,6 +102,8 @@ namespace osu.Game.Beatmaps
}
}
+ private object ImportLock = new object();
+
///
/// Import a beatmap from an .
///
@@ -109,7 +111,7 @@ namespace osu.Game.Beatmaps
public BeatmapSetInfo Import(ArchiveReader archiveReader)
{
// let's only allow one concurrent import at a time for now.
- lock (this)
+ lock (ImportLock)
{
BeatmapSetInfo set = importToStorage(archiveReader);
Import(set);
@@ -126,7 +128,8 @@ namespace osu.Game.Beatmaps
// If we have an ID then we already exist in the database.
if (beatmapSetInfo.ID != 0) return;
- beatmaps.Add(beatmapSetInfo);
+ lock (beatmaps)
+ beatmaps.Add(beatmapSetInfo);
}
///
@@ -136,13 +139,11 @@ namespace osu.Game.Beatmaps
/// The beatmap to delete.
public void Delete(BeatmapSetInfo beatmapSet)
{
- lock (this)
- {
+ lock (beatmaps)
if (!beatmaps.Delete(beatmapSet)) return;
- if (!beatmapSet.Protected)
- files.Dereference(beatmapSet.Files);
- }
+ if (!beatmapSet.Protected)
+ files.Dereference(beatmapSet.Files);
}
///
@@ -152,12 +153,10 @@ namespace osu.Game.Beatmaps
/// The beatmap to restore.
public void Undelete(BeatmapSetInfo beatmapSet)
{
- lock (this)
- {
+ lock (beatmaps)
if (!beatmaps.Undelete(beatmapSet)) return;
- files.Reference(beatmapSet.Files);
- }
+ files.Reference(beatmapSet.Files);
}
///
@@ -168,25 +167,23 @@ namespace osu.Game.Beatmaps
/// A instance correlating to the provided .
public WorkingBeatmap GetWorkingBeatmap(BeatmapInfo beatmapInfo, WorkingBeatmap previous = null)
{
- lock (this)
- {
- if (beatmapInfo == null || beatmapInfo == DefaultBeatmap?.BeatmapInfo)
- return DefaultBeatmap;
+ if (beatmapInfo == null || beatmapInfo == DefaultBeatmap?.BeatmapInfo)
+ return DefaultBeatmap;
+ lock (beatmaps)
beatmaps.Populate(beatmapInfo);
- if (beatmapInfo.BeatmapSet == null)
- throw new InvalidOperationException($@"Beatmap set {beatmapInfo.BeatmapSetInfoID} is not in the local database.");
+ if (beatmapInfo.BeatmapSet == null)
+ throw new InvalidOperationException($@"Beatmap set {beatmapInfo.BeatmapSetInfoID} is not in the local database.");
- if (beatmapInfo.Metadata == null)
- beatmapInfo.Metadata = beatmapInfo.BeatmapSet.Metadata;
+ if (beatmapInfo.Metadata == null)
+ beatmapInfo.Metadata = beatmapInfo.BeatmapSet.Metadata;
- WorkingBeatmap working = new BeatmapManagerWorkingBeatmap(files.Store, beatmapInfo);
+ WorkingBeatmap working = new BeatmapManagerWorkingBeatmap(files.Store, beatmapInfo);
- previous?.TransferTo(working);
+ previous?.TransferTo(working);
- return working;
- }
+ return working;
}
///