]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix ResearchSystem threading exception (#40917)
authorLeon Friedrich <60421075+ElectroJr@users.noreply.github.com>
Wed, 15 Oct 2025 12:53:34 +0000 (01:53 +1300)
committerGitHub <noreply@github.com>
Wed, 15 Oct 2025 12:53:34 +0000 (12:53 +0000)
* Fix ResearchSystem threading exception

* Update Content.Server/Research/Systems/ResearchSystem.Client.cs

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Content.Server/Research/Systems/ResearchSystem.Client.cs
Content.Server/Research/Systems/ResearchSystem.cs

index 3f7598242553b3a29f08abbbeb1eb1dbb11ae261..509d1d20de7fbe3ece272fc85fba14873bfe1ef7 100644 (file)
@@ -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
         {
index 5cad4d51bad882a99aefad0976c8d53f8c525e08..c6a2a0125d5e7af6d672b6ca64e69f9421d0f9d5 100644 (file)
@@ -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<Entity<ResearchServerComponent>> 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
         /// <returns></returns>
         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();
         }
 
         /// <summary>
@@ -84,27 +74,18 @@ namespace Content.Server.Research.Systems
         /// <returns></returns>
         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<Entity<ResearchServerComponent>> 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<Entity<ResearchServerComponent>>();
+            _lookup.GetGridEntities(grid, set);
+            return set;
         }
 
         public override void Update(float frameTime)