Hi Iris Friends!
I’m getting the very rare crash in this stack:
!ReportAssert() [C:\fbroot\Engine\Source\Runtime\Core\Private\Windows\WindowsPlatformCrashContext.cpp:1851]
!FWindowsErrorOutputDevice::Serialize() [C:\fbroot\Engine\Source\Runtime\Core\Private\Windows\WindowsErrorOutputDevice.cpp:84]
!FOutputDevice::LogfImpl() [C:\fbroot\Engine\Source\Runtime\Core\Private\Misc\OutputDevice.cpp:81]
!AssertFailedImplV() [C:\fbroot\Engine\Source\Runtime\Core\Private\Misc\AssertionMacros.cpp:150]
!FDebug::CheckVerifyFailedImpl2() [C:\fbroot\Engine\Source\Runtime\Core\Private\Misc\AssertionMacros.cpp:669]
!UObjectBase::MarkAsReachable() [C:\fbroot\Engine\Source\Runtime\CoreUObject\Private\UObject\GarbageCollection.cpp:6231]
!FObjectProperty::Identical() [C:\fbroot\Engine\Source\Runtime\CoreUObject\Private\UObject\PropertyObject.cpp:126]
!UE::Net::Private::InternalCompareMember() [C:\fbroot\Engine\Source\Runtime\Experimental\Iris\Core\Private\Iris\ReplicationState\InternalPropertyReplicationState.cpp:224]
!UE::Net::FPropertyReplicationState::PollPropertyValue() [C:\fbroot\Engine\Source\Runtime\Experimental\Iris\Core\Private\Iris\ReplicationState\PropertyReplicationState.cpp:173]
!UE::Net::FPropertyReplicationState::PollPropertyReplicationState() [C:\fbroot\Engine\Source\Runtime\Experimental\Iris\Core\Private\Iris\ReplicationState\PropertyReplicationState.cpp:280]
!UE::Net::FReplicationInstanceOperations::PollAndCopyPropertyData() [C:\fbroot\Engine\Source\Runtime\Experimental\Iris\Core\Private\Iris\ReplicationSystem\ReplicationOperations.cpp:683]
!UE::Net::Private::FObjectPoller::PushModelPollObject() [C:\fbroot\Engine\Source\Runtime\Experimental\Iris\Core\Private\Iris\ReplicationSystem\Polling\ObjectPoller.cpp:202]
!UE::Net::Private::FObjectPoller::PollAndCopyObjects() [C:\fbroot\Engine\Source\Runtime\Experimental\Iris\Core\Private\Iris\ReplicationSystem\Polling\ObjectPoller.cpp:46]
!UObjectReplicationBridge::PollAndCopy() [C:\fbroot\Engine\Source\Runtime\Experimental\Iris\Core\Private\Iris\ReplicationSystem\ObjectReplicationBridge.cpp:1353]
!UObjectReplicationBridge::PreSendUpdate() [C:\fbroot\Engine\Source\Runtime\Experimental\Iris\Core\Private\Iris\ReplicationSystem\ObjectReplicationBridge.cpp:1033]
!UReplicationSystem::PreSendUpdate() [C:\fbroot\Engine\Source\Runtime\Experimental\Iris\Core\Private\Iris\ReplicationSystem\ReplicationSystem.cpp:792]
!UNetDriver::TickFlush() [C:\fbroot\Engine\Source\Runtime\Engine\Private\NetDriver.cpp:1024]
it’s happening because the object ptr held in the state buffer has an InternalIndex of -1, indicating it has been deallocated. In this case, I believe there’s nothing else holding onto that previously replicated value, so it seems reasonable for it to be deallocated. Is there some system that’s supposed to keep objects held in replication state buffers from being garbage collected? Or should the code just be more tolerant of those (by storing a weak pointer or something? though that seems inefficient?) If there is a code path that’s supposed to notify the garbage collector about objects in the state buffer so they can be preserved, can you please show me where so I can debug? (Also, I’m on 5.5- maybe this has been fixed already?)
Thanks!
Josh