fix(http): close socket leaks in EmoteCache and FontManager
- EmoteCache.cs replaces the per-call "new HttpClient()" with the existing static Client field. The static instance already exists for two other endpoints in the same file and reuses connection pooling; the third call site was a stray that leaked a socket on every emote download - FontManager.cs wraps both the HttpClient and the HttpResponseMessage in using-blocks, replaces the .Result/AggregateException sandwich with GetAwaiter().GetResult() for clean exception propagation, and adds EnsureSuccessStatusCode so failed downloads don't silently produce a zero-byte font file. Full async refactor of the FontManager constructor is tracked separately
This commit is contained in:
@@ -192,7 +192,7 @@ public static class EmoteCache
|
||||
}
|
||||
else
|
||||
{
|
||||
var content = await new HttpClient().GetAsync(EmotePath.Format(emote.Id));
|
||||
var content = await Client.GetAsync(EmotePath.Format(emote.Id));
|
||||
RawData = await content.Content.ReadAsByteArrayAsync();
|
||||
|
||||
await using var stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.Read);
|
||||
|
||||
@@ -39,11 +39,18 @@ public class FontManager
|
||||
}
|
||||
else
|
||||
{
|
||||
GameSymFont = new HttpClient().GetAsync("https://img.finalfantasyxiv.com/lds/pc/global/fonts/FFXIV_Lodestone_SSF.ttf")
|
||||
.Result
|
||||
.Content
|
||||
.ReadAsByteArrayAsync()
|
||||
.Result;
|
||||
// Dispose HttpClient and HttpResponseMessage to avoid socket
|
||||
// exhaustion on repeated cold-start downloads. GetAwaiter().GetResult()
|
||||
// unwraps AggregateException so failures surface cleanly. A full
|
||||
// async refactor of the constructor would be cleaner but is out of
|
||||
// scope for v1.0.0 — tracked in the backlog.
|
||||
using var client = new HttpClient();
|
||||
using var response = client
|
||||
.GetAsync("https://img.finalfantasyxiv.com/lds/pc/global/fonts/FFXIV_Lodestone_SSF.ttf")
|
||||
.GetAwaiter()
|
||||
.GetResult();
|
||||
response.EnsureSuccessStatusCode();
|
||||
GameSymFont = response.Content.ReadAsByteArrayAsync().GetAwaiter().GetResult();
|
||||
|
||||
Dalamud.Utility.FilesystemUtil.WriteAllBytesSafe(filePath, GameSymFont);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user