From 75327959356327ec3599a4348c0b3099b9e625ae Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 1 Dec 2017 22:43:49 +0900 Subject: [PATCH] Lock during validity checks --- osu.Game/Beatmaps/WorkingBeatmap.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs index 93ba51367a..8c96074352 100644 --- a/osu.Game/Beatmaps/WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/WorkingBeatmap.cs @@ -121,6 +121,8 @@ namespace osu.Game.Beatmaps private readonly Func valueFactory; private readonly Func stillValidFunction; + private readonly object initLock = new object(); + public AsyncLazy(Func valueFactory, Func stillValidFunction = null) { this.valueFactory = valueFactory; @@ -134,7 +136,6 @@ namespace osu.Game.Beatmaps if (!IsValueCreated) return; (lazy.Value.Result as IDisposable)?.Dispose(); - init(); } @@ -158,9 +159,11 @@ namespace osu.Game.Beatmaps private void ensureValid() { - if (!lazy.IsValueCreated || (stillValidFunction?.Invoke(lazy.Value.Result) ?? true)) return; - - init(); + lock (initLock) + { + if (!lazy.IsValueCreated || (stillValidFunction?.Invoke(lazy.Value.Result) ?? true)) return; + init(); + } } private void init()