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
|
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();
|
RawData = await content.Content.ReadAsByteArrayAsync();
|
||||||
|
|
||||||
await using var stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.Read);
|
await using var stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.Read);
|
||||||
|
|||||||
@@ -39,11 +39,18 @@ public class FontManager
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GameSymFont = new HttpClient().GetAsync("https://img.finalfantasyxiv.com/lds/pc/global/fonts/FFXIV_Lodestone_SSF.ttf")
|
// Dispose HttpClient and HttpResponseMessage to avoid socket
|
||||||
.Result
|
// exhaustion on repeated cold-start downloads. GetAwaiter().GetResult()
|
||||||
.Content
|
// unwraps AggregateException so failures surface cleanly. A full
|
||||||
.ReadAsByteArrayAsync()
|
// async refactor of the constructor would be cleaner but is out of
|
||||||
.Result;
|
// 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);
|
Dalamud.Utility.FilesystemUtil.WriteAllBytesSafe(filePath, GameSymFont);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user