mirror of
https://github.com/ppy/osu.git
synced 2024-12-14 20:22:55 +08:00
Fix thread-safety of queued events list in ArchiveModelManager
This commit is contained in:
parent
b14d5e9fdc
commit
55372496d1
@ -59,7 +59,7 @@ namespace osu.Game.Database
|
|||||||
// ReSharper disable once NotAccessedField.Local (we should keep a reference to this so it is not finalised)
|
// ReSharper disable once NotAccessedField.Local (we should keep a reference to this so it is not finalised)
|
||||||
private ArchiveImportIPCChannel ipc;
|
private ArchiveImportIPCChannel ipc;
|
||||||
|
|
||||||
private readonly List<Action> cachedEvents = new List<Action>();
|
private readonly List<Action> queuedEvents = new List<Action>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Allows delaying of outwards events until an operation is confirmed (at a database level).
|
/// Allows delaying of outwards events until an operation is confirmed (at a database level).
|
||||||
@ -77,20 +77,26 @@ namespace osu.Game.Database
|
|||||||
/// <param name="perform">Whether the flushed events should be performed.</param>
|
/// <param name="perform">Whether the flushed events should be performed.</param>
|
||||||
private void flushEvents(bool perform)
|
private void flushEvents(bool perform)
|
||||||
{
|
{
|
||||||
|
Action[] events;
|
||||||
|
lock (queuedEvents)
|
||||||
|
{
|
||||||
|
events = queuedEvents.ToArray();
|
||||||
|
queuedEvents.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
if (perform)
|
if (perform)
|
||||||
{
|
{
|
||||||
foreach (var a in cachedEvents)
|
foreach (var a in events)
|
||||||
a.Invoke();
|
a.Invoke();
|
||||||
}
|
}
|
||||||
|
|
||||||
cachedEvents.Clear();
|
|
||||||
delayingEvents = false;
|
delayingEvents = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleEvent(Action a)
|
private void handleEvent(Action a)
|
||||||
{
|
{
|
||||||
if (delayingEvents)
|
if (delayingEvents)
|
||||||
cachedEvents.Add(a);
|
lock (queuedEvents) queuedEvents.Add(a);
|
||||||
else
|
else
|
||||||
a.Invoke();
|
a.Invoke();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user