View Issue Details
ID | Project | Category | Date Submitted | Last Update | |
---|---|---|---|---|---|
0025832 | AI War 2 | Bug - Other | Nov 15, 2021 11:05 pm | Nov 16, 2021 4:42 pm | |
Reporter | ColdPrototype | Assigned To | Chris_McElligottPark | ||
Status | resolved | Resolution | fixed | ||
Fixed in Version | Beta 3.752 Pathfinding Efficiency | ||||
Summary | 0025832: Pathfinder error for DZS | ||||
Description | Not reliably reproducible from a save. Rarely occurs, but has happened multiple times. 11/15/2021 10:55:27 PM 3.751 SINGLEP DELAYED14 TID61 Called Dark Zenith Svikari FireteamGetDangerOfPath2 pathfinder again before it finished finding the first path! This probably means it's being called by two threads! Run started: 0 ticks ago (0ms) at System.Environment.get_StackTrace () [0x00000] in <695d1cc93cca45069c528c15c9fdd749>:0 at Arcen.Universal.ArcenDebugging.ArcenDebugLog (System.String Message, Arcen.Universal.Verbosity Verbosity) [0x00000] in <213b58ccdbaa4596ac7ad7e33d9b50e4>:0 at Arcen.AIW2.External.ArcenPathfinder`1[N].FindPathInner (Arcen.AIW2.Core.Faction Fac, System.String DebugAddendum, Arcen.Universal.List`1[T] PathToFill, N Origin, N Target, System.Int32 NeedToGetWithinXRangeOfTarget, System.Int32 RequiresNoMoreThanXRangeFromOrigin, System.Boolean DoDebugLog, Arcen.AIW2.Core.ArcenSimContextAnyStatus Context) [0x00000] in <7e6027227b9c4d9695d042e8bf47664e>:0 at Arcen.AIW2.External.ArcenPathfinder`1[N].FindPath (Arcen.AIW2.Core.Faction Fac, System.String DebugAddendum, Arcen.Universal.List`1[T] PathToFill, N Origin, N Target, System.Int32 NeedToGetWithinXRangeOfTarget, System.Int32 RequiresNoMoreThanXRangeFromOrigin, System.Boolean DoDebugLog, Arcen.AIW2.Core.ArcenSimContextAnyStatus Context) [0x00000] in <7e6027227b9c4d9695d042e8bf47664e>:0 at Arcen.AIW2.External.PathingHelper.InnerFindPath_Raw (Arcen.AIW2.Core.Faction faction, System.String DebugAddendum, Arcen.AIW2.Core.Planet Origin, Arcen.AIW2.Core.Planet Target, Arcen.AIW2.External.PathingMode mode, Arcen.AIW2.Core.ArcenSimContextAnyStatus Context) [0x00000] in <7e6027227b9c4d9695d042e8bf47664e>:0 at Arcen.AIW2.External.PathingHelper.FindPathFreshOrFromCache (Arcen.AIW2.Core.Faction ForFaction, System.String DebugAddendum, Arcen.AIW2.Core.Planet Origin, Arcen.AIW2.Core.Planet Target, Arcen.AIW2.External.PathingMode mode, Arcen.AIW2.Core.ArcenSimContextAnyStatus Context) [0x00000] in <7e6027227b9c4d9695d042e8bf47664e>:0 at Arcen.AIW2.External.Fireteam.GetDangerOfPath (Arcen.AIW2.Core.Faction faction, Arcen.AIW2.Core.ArcenSimContextAnyStatus Context, Arcen.AIW2.Core.Planet source, Arcen.AIW2.Core.Planet destination, System.Boolean includeDestination, System.Int16& hops) [0x00000] in <7e6027227b9c4d9695d042e8bf47664e>:0 at Arcen.AIW2.External.FireteamHonoraryDeepInfo.CanISafelyGetToLurkPlanet (Arcen.AIW2.Core.Faction faction, Arcen.AIW2.Core.ArcenSimContextAnyStatus Context) [0x00000] in <7e6027227b9c4d9695d042e8bf47664e>:0 at Arcen.AIW2.External.FireteamUtility+<>c__DisplayClass7_0.<UpdateFireteams>b__3 (Arcen.AIW2.External.Fireteam team) [0x00000] in <62f8a4c46c01499aa9179e48996bc652>:0 at Arcen.AIW2.External.Fireteam.DoFor (Arcen.Universal.ArcenLessLinkedList`1[ItemType] List, Arcen.AIW2.External.Fireteam+ProcessorDelegate Processor) [0x00000] in <7e6027227b9c4d9695d042e8bf47664e>:0 at Arcen.AIW2.External.FireteamUtility.UpdateFireteams (Arcen.AIW2.Core.Faction faction, Arcen.AIW2.External.ArcenLongTermIntermittentPlanningContext Context, Arcen.Universal.ArcenLessLinkedList`1[ItemType] Teams, Arcen.Universal.ProtectedValDictionary`2[TKey,TValue] TeamsAimedAtPlanet, Arcen.Universal.ArcenCharacterBuffer tracingBuffer, Arcen.Universal.FInt attackingStrengthMultiplier, Arcen.Universal.List`1[T] PlanetsToDefendInput, Arcen.Universal.List`1[T] ShipsThatNeedEscorting) [0x00000] in <62f8a4c46c01499aa9179e48996bc652>:0 at Arcen.AIW2.External.DarkZenithFactionDeepInfoRoot.DoLongRangePlanning_OnBackgroundNonSimThread_Subclass (Arcen.AIW2.External.ArcenLongTermIntermittentPlanningContext Context) [0x00000] in <62f8a4c46c01499aa9179e48996bc652>:0 at Arcen.AIW2.External.ExternalFactionDeepInfoRoot.DoLongRangePlanning_OnBackgroundNonSimThread_HostOnly (Arcen.AIW2.Core.ILongRangePlanningHostContext Context) [0x00000] in <62f8a4c46c01499aa9179e48996bc652>:0 at Arcen.AIW2.Core.Faction.Safe_DeepInfo_DoLongRangePlanning_OnBackgroundNonSimThread_HostOnly (Arcen.AIW2.Core.ILongRangePlanningHostContext Context) [0x00000] in <4a1815a6dff24fc7a1ebc7682fdef1f7>:0 at Arcen.AIW2.External.SpecialFactionPlanning.Execute () [0x00000] in <62f8a4c46c01499aa9179e48996bc652>:0 at Arcen.AIW2.External.ArcenHostOnlySimPlanningContext.BackgroundThreadRunHandler (System.Boolean FailSilentlyIfNotFinishedYet) [0x00000] in <7e6027227b9c4d9695d042e8bf47664e>:0 at Arcen.AIW2.External.ArcenHostOnlySimPlanningContext+<>c__DisplayClass14_0.<RunOnBackgroundThread>b__0 () [0x00000] in <7e6027227b9c4d9695d042e8bf47664e>:0 at System.Threading.Tasks.Task.InnerInvoke () [0x00000] in <695d1cc93cca45069c528c15c9fdd749>:0 at System.Threading.Tasks.Task.Execute () [0x00000] in <695d1cc93cca45069c528c15c9fdd749>:0 at System.Threading.Tasks.Task.ExecutionContextCallback (System.Object obj) [0x00000] in <695d1cc93cca45069c528c15c9fdd749>:0 at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <695d1cc93cca45069c528c15c9fdd749>:0 at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <695d1cc93cca45069c528c15c9fdd749>:0 at System.Threading.Tasks.Task.ExecuteWithThreadLocal (System.Threading.Tasks.Task& currentTaskSlot) [0x00000] in <695d1cc93cca45069c528c15c9fdd749>:0 at System.Threading.Tasks.Task.ExecuteEntry (System.Boolean bPreventDoubleExecution) [0x00000] in <695d1cc93cca45069c528c15c9fdd749>:0 at System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem () [0x00000] in <695d1cc93cca45069c528c15c9fdd749>:0 at System.Threading.ThreadPoolWorkQueue.Dispatch () [0x00000] in <695d1cc93cca45069c528c15c9fdd749>:0 at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback () [0x00000] in <695d1cc93cca45069c528c15c9fdd749>:0 | ||||
Tags | No tags attached. | ||||
|
To confirm, this is happening on today's steam build, right? There were some important changes in this code in 3.751 |
|
Yes. |
|
What factions did you have in the game? A save might be useful if only for reference as to what the game settings were. |
|
Attached. It occurred twice thus far. |
|
I've been running this save for about 14 minutes so far, and have not seen it. You had said that it is hard to reproduce, however. What is interesting about this one has moved from being super frequent for you, to being something comparably rare. Ultimately I think that this comes down to me needing to rework how the LRP threads handle pathfinders and caching, which I don't mind because it will also yield some RAM usage benefits. Right now, there are various worker methods that have threadstatic internal variables. I really need to move away from that for a lot of reasons. Instead, what I can do is make it so that the variables are pulled out of a general pool at the start of the LRP process, and then put back in when complete. Because of the way the contexts are being set up, though, I might not even have to do that -- I might be able to just make these objects live in the context, thus bypassing the need for a pool. I guess the short version is that this is one of a few places where accidentally-multiple-running threads cause a "oh no" when they should ideally cause a "didn't even notice." This pairs nicely with the goal to keep ram usage from climbing. Because of all the many many background task threads now, I see that it looks like there's about 300-400 MB of RAM that gets used within 20 minutes of play that probably is an excess. It's a fair bet that only will climb over time, despite everything else I've done to stem that. The good news is that all of these goals converge on a single methodology for code updates, and I've already done the larger bulk of that work from what I can tell (knock on wood). |
|
(By the time I posted that, I'd been running that save a couple of times for 25 minutes.) |
|
Thanks! * PathCache has been converted to be concurrent-poolable, rather than between-mapgen pooled. ** The idea is that various threads only need these for a while and can give them back. ** Since CacheForPathingMode is a subcomponent of this, it also now has the same behavior as well. ** ...and PathBetweenPlanetsForFaction also gets the same treatment, goodness. ** GetOrAddPathCacheForFactionInThisThread in PathingHelper has been removed, and a new PerFactionPathCache concurrent-poolable object has taken its place. ** This whole rework basically keeps all the logic the same, but makes the "pathfinder didn't finish before it was run again" bug impossible to hit now. Apparently it became more rare in the prior build, but was still possible. Exactly why is hard for me to tell, but it's hard to be sure why. ** The secondary effect of this is that there had been a pretty massive amount of RAM being used for pathfinding cache data, 300MB or so after maybe 20 minutes of play from what I can tell, and it might actually have qualified as a memory leak, temporarily. The number of tracked objects was into the hundreds and climbing. In the same sort of scenario, the number of tracked objects is now... 3. And RAM stays stable. |
Date Modified | Username | Field | Change |
---|---|---|---|
Nov 15, 2021 11:05 pm | ColdPrototype | New Issue | |
Nov 15, 2021 11:22 pm | BadgerBadger | Note Added: 0063313 | |
Nov 15, 2021 11:27 pm | ColdPrototype | Note Added: 0063314 | |
Nov 16, 2021 1:09 am | BadgerBadger | Assigned To | => Chris_McElligottPark |
Nov 16, 2021 1:09 am | BadgerBadger | Status | new => assigned |
Nov 16, 2021 1:10 am | BadgerBadger | Note Added: 0063316 | |
Nov 16, 2021 1:45 am | ColdPrototype | Note Added: 0063317 | |
Nov 16, 2021 1:45 am | ColdPrototype | File Added: Next.save | |
Nov 16, 2021 9:52 am | Chris_McElligottPark | Note Added: 0063318 | |
Nov 16, 2021 9:53 am | Chris_McElligottPark | Note Added: 0063319 | |
Nov 16, 2021 4:42 pm | Chris_McElligottPark | Status | assigned => resolved |
Nov 16, 2021 4:42 pm | Chris_McElligottPark | Resolution | open => fixed |
Nov 16, 2021 4:42 pm | Chris_McElligottPark | Fixed in Version | => Beta 3.752 Pathfinding Efficiency |
Nov 16, 2021 4:42 pm | Chris_McElligottPark | Note Added: 0063323 |