fix: try/finally all mutexes
This commit is contained in:
parent
97947bd768
commit
3a09ad989d
|
@ -190,14 +190,16 @@ internal class Messages : IDisposable {
|
|||
var messages = JsonConvert.DeserializeObject<Message[]>(json)!;
|
||||
|
||||
await this.CurrentMutex.WaitAsync();
|
||||
this.Current.Clear();
|
||||
try {
|
||||
this.Current.Clear();
|
||||
|
||||
foreach (var message in messages) {
|
||||
this.Current[message.Id] = message;
|
||||
this.SpawnQueue.Enqueue(message);
|
||||
foreach (var message in messages) {
|
||||
this.Current[message.Id] = message;
|
||||
this.SpawnQueue.Enqueue(message);
|
||||
}
|
||||
} finally {
|
||||
this.CurrentMutex.Release();
|
||||
}
|
||||
|
||||
this.CurrentMutex.Release();
|
||||
}
|
||||
|
||||
private void RemoveVfx(object? sender, EventArgs? e) {
|
||||
|
@ -210,8 +212,11 @@ internal class Messages : IDisposable {
|
|||
|
||||
internal void Clear() {
|
||||
this.CurrentMutex.Wait();
|
||||
this.Current.Clear();
|
||||
this.CurrentMutex.Release();
|
||||
try {
|
||||
this.Current.Clear();
|
||||
} finally {
|
||||
this.CurrentMutex.Release();
|
||||
}
|
||||
}
|
||||
|
||||
internal IEnumerable<Message> Nearby() {
|
||||
|
@ -221,27 +226,39 @@ internal class Messages : IDisposable {
|
|||
|
||||
var position = player.Position;
|
||||
|
||||
List<Message> nearby;
|
||||
this.CurrentMutex.Wait();
|
||||
var nearby = this.Current
|
||||
.Values
|
||||
.Where(msg => Math.Abs(msg.Position.Y - position.Y) <= 1f)
|
||||
.Where(msg => Vector3.Distance(msg.Position, position) <= 2f)
|
||||
.ToList();
|
||||
this.CurrentMutex.Release();
|
||||
try {
|
||||
nearby = this.Current
|
||||
.Values
|
||||
.Where(msg => Math.Abs(msg.Position.Y - position.Y) <= 1f)
|
||||
.Where(msg => Vector3.Distance(msg.Position, position) <= 2f)
|
||||
.ToList();
|
||||
} finally {
|
||||
this.CurrentMutex.Release();
|
||||
}
|
||||
|
||||
|
||||
return nearby;
|
||||
}
|
||||
|
||||
internal void Add(Message message) {
|
||||
this.CurrentMutex.Wait();
|
||||
this.Current[message.Id] = message;
|
||||
this.CurrentMutex.Release();
|
||||
try {
|
||||
this.Current[message.Id] = message;
|
||||
} finally {
|
||||
this.CurrentMutex.Release();
|
||||
}
|
||||
|
||||
this.SpawnQueue.Enqueue(message);
|
||||
}
|
||||
|
||||
internal void Remove(Guid id) {
|
||||
this.CurrentMutex.Wait();
|
||||
this.Current.Remove(id);
|
||||
this.CurrentMutex.Release();
|
||||
try {
|
||||
this.Current.Remove(id);
|
||||
} finally {
|
||||
this.CurrentMutex.Release();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,8 +20,11 @@ public class Pack {
|
|||
var json = await resp.Content.ReadAsStringAsync();
|
||||
var packs = JsonConvert.DeserializeObject<Pack[]>(json)!;
|
||||
await AllMutex.WaitAsync();
|
||||
All = packs;
|
||||
AllMutex.Release();
|
||||
try {
|
||||
All = packs;
|
||||
} finally {
|
||||
AllMutex.Release();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,7 +41,14 @@ internal class MessageList : ITab {
|
|||
}
|
||||
|
||||
this.MessagesMutex.Wait();
|
||||
try {
|
||||
this.ShowList();
|
||||
} finally {
|
||||
this.MessagesMutex.Release();
|
||||
}
|
||||
}
|
||||
|
||||
private void ShowList() {
|
||||
ImGui.TextUnformatted($"Messages: {this.Messages.Count:N0} / {10 + this.Plugin.Ui.MainWindow.ExtraMessages:N0}");
|
||||
|
||||
ImGui.Separator();
|
||||
|
@ -112,8 +119,6 @@ internal class MessageList : ITab {
|
|||
}
|
||||
|
||||
ImGui.EndChild();
|
||||
|
||||
this.MessagesMutex.Release();
|
||||
}
|
||||
|
||||
private void Refresh() {
|
||||
|
@ -126,10 +131,13 @@ internal class MessageList : ITab {
|
|||
var json = await resp.Content.ReadAsStringAsync();
|
||||
var messages = JsonConvert.DeserializeObject<MyMessages>(json)!;
|
||||
await this.MessagesMutex.WaitAsync();
|
||||
this.Plugin.Ui.MainWindow.ExtraMessages = messages.Extra;
|
||||
this.Messages.Clear();
|
||||
this.Messages.AddRange(messages.Messages);
|
||||
this.MessagesMutex.Release();
|
||||
try {
|
||||
this.Plugin.Ui.MainWindow.ExtraMessages = messages.Extra;
|
||||
this.Messages.Clear();
|
||||
this.Messages.AddRange(messages.Messages);
|
||||
} finally {
|
||||
this.MessagesMutex.Release();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue