55 if (AutoRTFM::IsClosed() || AutoRTFM::IsCommittingOrAborting())
59 else if (AutoRTFM::IsTransactional())
72 if (AutoRTFM::IsClosed() || AutoRTFM::IsCommittingOrAborting())
76 else if (AutoRTFM::IsTransactional())
83 return State->Mutex.TryLock();
89 if (AutoRTFM::IsClosed() || AutoRTFM::IsCommittingOrAborting())
93 else if (AutoRTFM::IsTransactional())
115 return State->MutexIsLocked();
121 template <
bool (FTransactionallySafeMutex::*Functor)()>
125 AutoRTFM::EContextStatus Status = AutoRTFM::Close([
this, &Result]
127 Result = (this->*Functor)();
129 check(Status == AutoRTFM::EContextStatus::OnTrack);
135 check(AutoRTFM::IsClosed() || AutoRTFM::IsCommittingOrAborting());
136 ensure(
State->TransactionalLockCount >= -1 &&
State->TransactionalLockCount <= 1);
138 if (
State->TransactionalLockCount > 0)
143 if (
State->bTransactionallyLocked)
146 State->TransactionalLockCount++;
150 if (
State->TransactionalLockCount < 0)
154 State->TransactionalLockCount++;
159 if (!
State->MutexTryLock())
167 State->TransactionalLockCount++;
176 check(AutoRTFM::IsClosed() || AutoRTFM::IsCommittingOrAborting());
177 ensure(
State->TransactionalLockCount >= -1 &&
State->TransactionalLockCount <= 0);
179 State->TransactionalLockCount++;
181 if (
State->bTransactionallyLocked)
187 if (
State->TransactionalLockCount == 0)
204 check(AutoRTFM::IsClosed() || AutoRTFM::IsCommittingOrAborting());
205 ensure(
State->TransactionalLockCount >= 0 &&
State->TransactionalLockCount <= 1);
207 State->TransactionalLockCount--;
210 MaybeRegisterCommitHandler();
220 State->bTransactionallyLocked =
true;
222 MaybeRegisterCommitHandler();
228 State.Object->MutexUnlock();
229 State.Object->ResetTransactionState();
235 void MaybeRegisterCommitHandler()
237 if (!
State->bRegisteredCommitHandler)
239 State->bRegisteredCommitHandler =
true;
248 if (
State.Object->TransactionalLockCount < 0 ||
249 (
State.Object->bTransactionallyLocked &&
State.Object->TransactionalLockCount == 0))
251 State.Object->MutexUnlock();
253 State.Object->ResetTransactionState();
271 ensure(bRegisteredCommitHandler ==
false);
279 bRegisteredCommitHandler =
false;
317 bool bRegisteredCommitHandler : 1;
#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
#define UE_NONCOPYABLE(TypeName)
Definition CoreMiscDefines.h:457
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
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
Definition OpenWrapper.h:28
Definition SharedPointer.h:692
bool IsLocked() const
Definition RecursiveMutex.h:26
UE_API void Lock()
Definition RecursiveMutex.cpp:40
UE_API bool TryLock()
Definition RecursiveMutex.cpp:13
UE_API void Unlock()
Definition RecursiveMutex.cpp:115
UE::FRecursiveMutex Mutex
Definition MeshPaintVirtualTexture.cpp:164
State
Definition PacketHandler.h:88
UE_STRING_CLASS Result(Forward< LhsType >(Lhs), RhsLen)
Definition String.cpp.inl:732
Definition AdvancedWidgetsModule.cpp:13
FMutex FTransactionallySafeMutex
Definition TransactionallySafeMutex.h:324
@ false
Definition radaudio_common.h:23