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