From 014172ea3c7cd7b8f808abd7748c339b311e1483 Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Thu, 25 May 2023 10:39:34 +0200 Subject: [PATCH] fixes rare race issue with data building --- MareSynchronos/PlayerData/Handlers/GameObjectHandler.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/MareSynchronos/PlayerData/Handlers/GameObjectHandler.cs b/MareSynchronos/PlayerData/Handlers/GameObjectHandler.cs index 663dece..c0e0953 100644 --- a/MareSynchronos/PlayerData/Handlers/GameObjectHandler.cs +++ b/MareSynchronos/PlayerData/Handlers/GameObjectHandler.cs @@ -18,6 +18,7 @@ public sealed class GameObjectHandler : DisposableMediatorSubscriberBase private Task? _delayedZoningTask; private bool _haltProcessing = false; private bool _ignoreSendAfterRedraw = false; + private int _ptrNullCounter = 0; private CancellationTokenSource _zoningCts = new(); public GameObjectHandler(ILogger logger, PerformanceCollectorService performanceCollector, @@ -175,6 +176,7 @@ public sealed class GameObjectHandler : DisposableMediatorSubscriberBase Address = _getAddress(); if (Address != IntPtr.Zero) { + _ptrNullCounter = 0; var drawObjAddr = (IntPtr)((FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)Address)->DrawObject; DrawObjectAddress = drawObjAddr; } @@ -297,6 +299,13 @@ public sealed class GameObjectHandler : DisposableMediatorSubscriberBase var curPtr = _getAddress(); Logger.LogTrace("[{this}] IsBeingDrawn, CurPtr: {ptr}", this, curPtr.ToString("X")); + if (curPtr == IntPtr.Zero && _ptrNullCounter < 2) + { + Logger.LogTrace("[{this}] IsBeingDrawn, CurPtr is ZERO, counter is {cnt}", this, _ptrNullCounter); + _ptrNullCounter++; + return true; + } + if (curPtr == IntPtr.Zero) { Logger.LogTrace("[{this}] IsBeingDrawn, CurPtr is ZERO, returning", this);