A few tweaks to LockedWrapper locking

This commit is contained in:
2023-09-03 03:40:44 -04:00
parent e237c28382
commit 57ea8d8574

View File

@@ -52,8 +52,6 @@ uint32 AIntegrationGameModeBase::Run()
void AIntegrationGameModeBase::ResetToInitialState()
{
FLockedWrapper w(LockableWrapper);
// Shut down the thread and release the ThreadEvent
if (Thread != nullptr)
{
@@ -66,6 +64,10 @@ void AIntegrationGameModeBase::ResetToInitialState()
}
ThreadStopRequested = false;
// Now that the thread's gone, we should be able to
// just claim and hold the lock on the wrapper.
FLockedWrapper w(LockableWrapper);
// Release and close all sockets.
if (Sockets != nullptr)
{
@@ -146,15 +148,20 @@ void AIntegrationGameModeBase::BeginPlay()
{
Super::BeginPlay();
// Make sure we're starting from a clean slate.
// Note: this claims the wrapper lock, so don't claim
// the lock before calling this.
ResetToInitialState();
// Now we're just going to claim the wrapper
// lock for the remainder. When we create the thread,
// the thread will hang until we release this lock.
FLockedWrapper w(LockableWrapper);
// Sanity checks.
// Sanity checks. Make sure everything is clean.
checkf(Thread == nullptr, TEXT("There should be no thread here."));
checkf(w->engine == nullptr, TEXT("There should be no engine here."));
// Make sure we're starting from a clean slate.
ResetToInitialState();
// Try to initialize the wrapper.
w.InitWrapper();