51 if (AutoRTFM::IsTransactional() || AutoRTFM::IsCommittingOrAborting())
53 const bool bResult = AutoRTFM::Open([&]
57 if (0 ==
State->ReadLockCount && 0 ==
State->WriteLockCount)
59 if (UNLIKELY(!State->Detector.AcquireReadAccess()))
65 State->ReadLockCount += 1;
95 if (AutoRTFM::IsTransactional() || AutoRTFM::IsCommittingOrAborting())
106 return State->Detector.ReleaseReadAccess();
116 if (AutoRTFM::IsTransactional() || AutoRTFM::IsCommittingOrAborting())
118 const bool bResult = AutoRTFM::Open([&]
120 if ((0 ==
State->ReadLockCount) && (0 ==
State->WriteLockCount))
124 if (UNLIKELY(!State->Detector.AcquireWriteAccess()))
129 else if (0 ==
State->WriteLockCount)
133 if (UNLIKELY(!State->Detector.UpgradeReadAccessToWriteAccess()))
139 State->WriteLockCount += 1;
169 if (AutoRTFM::IsTransactional() || AutoRTFM::IsCommittingOrAborting())
180 return State->Detector.ReleaseWriteAccess();
212 if (0 <
State->ReadLockCount)
214 State->ReadLockCount -= 1;
216 if ((0 ==
State->ReadLockCount) && (0 ==
State->WriteLockCount))
218 State->Detector.ReleaseReadAccess();
221 else if (0 <
State->WriteLockCount)
223 State->WriteLockCount -= 1;
225 if (0 ==
State->WriteLockCount)
227 State->Detector.ReleaseWriteAccess();
281#define UE_MT_DECLARE_TS_RW_ACCESS_DETECTOR(AccessDetector) FRWTransactionallySafeAccessDetector AccessDetector;
285#define UE_MT_DECLARE_TS_RW_ACCESS_DETECTOR(AccessDetector)
#define check(expr)
Definition AssertionMacros.h:314
#define ensure( InExpression)
Definition AssertionMacros.h:464
#define UE_AUTORTFM_NOAUTORTFM
Definition AutoRTFMDefines.h:113
#define UE_AUTORTFM_ALWAYS_OPEN
Definition AutoRTFMDefines.h:114
TSharedRef< InObjectType, InMode > MakeShared(InArgTypes &&... Args)
Definition SharedPointer.h:2009
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition OpenWrapper.h:28
Definition SharedPointer.h:692
State
Definition PacketHandler.h:88