From 68f9d748a2f4398a9d60bc42e19e272b7162c358 Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Thu, 16 Oct 2025 01:53:34 +1300 Subject: [PATCH] Fix ResearchSystem threading exception (#40917) * Fix ResearchSystem threading exception * Update Content.Server/Research/Systems/ResearchSystem.Client.cs --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- .../Research/Systems/ResearchSystem.Client.cs | 13 +++----- .../Research/Systems/ResearchSystem.cs | 33 ++++--------------- 2 files changed, 12 insertions(+), 34 deletions(-) diff --git a/Content.Server/Research/Systems/ResearchSystem.Client.cs b/Content.Server/Research/Systems/ResearchSystem.Client.cs index 3f75982425..509d1d20de 100644 --- a/Content.Server/Research/Systems/ResearchSystem.Client.cs +++ b/Content.Server/Research/Systems/ResearchSystem.Client.cs @@ -2,6 +2,7 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using Content.Server.Power.EntitySystems; using Content.Shared.Research.Components; +using Robust.Shared.Utility; namespace Content.Server.Research.Systems; @@ -62,10 +63,8 @@ public sealed partial class ResearchSystem private void OnClientMapInit(EntityUid uid, ResearchClientComponent component, MapInitEvent args) { - var allServers = GetServers(uid).ToList(); - - if (allServers.Count > 0) - RegisterClient(uid, allServers[0], component, allServers[0]); + if (GetServers(uid).FirstOrNull() is { } server) + RegisterClient(uid, server, component, server); } private void OnClientShutdown(EntityUid uid, ResearchClientComponent component, ComponentShutdown args) @@ -85,10 +84,8 @@ public sealed partial class ResearchSystem if (ent.Comp.Server is not null) return; - var allServers = GetServers(ent).ToList(); - - if (allServers.Count > 0) - RegisterClient(ent, allServers[0], ent, allServers[0]); + if (GetServers(ent).FirstOrNull() is { } server) + RegisterClient(ent, server, ent, server); } else { diff --git a/Content.Server/Research/Systems/ResearchSystem.cs b/Content.Server/Research/Systems/ResearchSystem.cs index 5cad4d51ba..c6a2a0125d 100644 --- a/Content.Server/Research/Systems/ResearchSystem.cs +++ b/Content.Server/Research/Systems/ResearchSystem.cs @@ -23,8 +23,6 @@ namespace Content.Server.Research.Systems [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly RadioSystem _radio = default!; - private static readonly HashSet> ClientLookup = new(); - public override void Initialize() { base.Initialize(); @@ -49,7 +47,7 @@ namespace Content.Server.Research.Systems serverUid = null; serverComponent = null; - var query = GetServers(client).ToList(); + var query = GetServers(client); foreach (var (uid, server) in query) { if (server.Id != id) @@ -67,15 +65,7 @@ namespace Content.Server.Research.Systems /// public string[] GetServerNames(EntityUid client) { - var allServers = GetServers(client).ToArray(); - var list = new string[allServers.Length]; - - for (var i = 0; i < allServers.Length; i++) - { - list[i] = allServers[i].Comp.ServerName; - } - - return list; + return GetServers(client).Select(x => x.Comp.ServerName).ToArray(); } /// @@ -84,27 +74,18 @@ namespace Content.Server.Research.Systems /// public int[] GetServerIds(EntityUid client) { - var allServers = GetServers(client).ToArray(); - var list = new int[allServers.Length]; - - for (var i = 0; i < allServers.Length; i++) - { - list[i] = allServers[i].Comp.Id; - } - - return list; + return GetServers(client).Select(x => x.Comp.Id).ToArray(); } public HashSet> GetServers(EntityUid client) { - ClientLookup.Clear(); - var clientXform = Transform(client); if (clientXform.GridUid is not { } grid) - return ClientLookup; + return []; - _lookup.GetGridEntities(grid, ClientLookup); - return ClientLookup; + var set = new HashSet>(); + _lookup.GetGridEntities(grid, set); + return set; } public override void Update(float frameTime)