fix: move ulls controller thread start

Move starting ulls controller thread outside constructor to avoid vptr
race.

Signed-off-by: Dominik Dabek <dominik.dabek@intel.com>
This commit is contained in:
Dominik Dabek
2024-03-26 18:08:25 +00:00
committed by Compute-Runtime-Automation
parent 707796a50d
commit 295b58a11f
4 changed files with 9 additions and 21 deletions

View File

@@ -28,8 +28,6 @@ DirectSubmissionController::DirectSubmissionController() {
if (debugManager.flags.DirectSubmissionControllerMaxTimeout.get() != -1) {
maxTimeout = std::chrono::microseconds{debugManager.flags.DirectSubmissionControllerMaxTimeout.get()};
}
directSubmissionControllingThread = Thread::create(controlDirectSubmissionsState, reinterpret_cast<void *>(this));
};
DirectSubmissionController::~DirectSubmissionController() {
@@ -86,6 +84,10 @@ void DirectSubmissionController::unregisterDirectSubmission(CommandStreamReceive
directSubmissions.erase(csr);
}
void DirectSubmissionController::startThread() {
directSubmissionControllingThread = Thread::create(controlDirectSubmissionsState, reinterpret_cast<void *>(this));
}
void DirectSubmissionController::startControlling() {
this->runControlling.store(true);
}

View File

@@ -43,6 +43,7 @@ class DirectSubmissionController {
void registerDirectSubmission(CommandStreamReceiver *csr);
void unregisterDirectSubmission(CommandStreamReceiver *csr);
void startThread();
void startControlling();
static bool isSupported();

View File

@@ -120,6 +120,7 @@ DirectSubmissionController *ExecutionEnvironment::initializeDirectSubmissionCont
if (initializeDirectSubmissionController && this->directSubmissionController == nullptr) {
this->directSubmissionController = std::make_unique<DirectSubmissionController>();
this->directSubmissionController->startThread();
}
return directSubmissionController.get();

View File

@@ -48,9 +48,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegiste
csr.taskCount.store(5u);
DirectSubmissionControllerMock controller;
controller.keepControlling.store(false);
controller.directSubmissionControllingThread->join();
controller.directSubmissionControllingThread.reset();
controller.registerDirectSubmission(&csr);
controller.checkNewSubmissions();
@@ -95,6 +92,7 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenTimeout
DirectSubmissionControllerMock controller;
executionEnvironment.directSubmissionController.reset(&controller);
controller.startThread();
csr.startControllingDirectSubmissions();
controller.registerDirectSubmission(&csr);
@@ -115,8 +113,8 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenTimeout
TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWithStartedControllingWhenShuttingDownThenNoHang) {
DirectSubmissionControllerMock controller;
controller.startThread();
EXPECT_NE(controller.directSubmissionControllingThread.get(), nullptr);
controller.startControlling();
while (!controller.sleepCalled) {
@@ -143,9 +141,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerAndDivisorD
csr.setupContext(*osContext.get());
DirectSubmissionControllerMock controller;
controller.keepControlling.store(false);
controller.directSubmissionControllingThread->join();
controller.directSubmissionControllingThread.reset();
controller.registerDirectSubmission(&csr);
{
csr.taskCount.store(1u);
@@ -243,9 +238,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerAndAdjustOn
DirectSubmissionControllerMock controller;
controller.setTimeoutParamsForPlatform(csr.getProductHelper());
controller.keepControlling.store(false);
controller.directSubmissionControllingThread->join();
controller.directSubmissionControllingThread.reset();
controller.registerDirectSubmission(&csr);
EXPECT_TRUE(controller.adjustTimeoutOnThrottleAndAcLineStatus);
fillTimeoutParamsMap(controller);
@@ -345,6 +337,7 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerAndAdjustOn
TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWithNotStartedControllingWhenShuttingDownThenNoHang) {
DirectSubmissionControllerMock controller;
controller.startThread();
EXPECT_NE(controller.directSubmissionControllingThread.get(), nullptr);
while (!controller.sleepCalled) {
@@ -391,9 +384,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegiste
csr4.setupContext(*osContext4.get());
DirectSubmissionControllerMock controller;
controller.keepControlling.store(false);
controller.directSubmissionControllingThread->join();
controller.directSubmissionControllingThread.reset();
EXPECT_EQ(controller.timeout.count(), 5'000);
@@ -495,9 +485,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegiste
csr10.setupContext(*osContext10.get());
DirectSubmissionControllerMock controller;
controller.keepControlling.store(false);
controller.directSubmissionControllingThread->join();
controller.directSubmissionControllingThread.reset();
EXPECT_EQ(controller.timeout.count(), 5'000);
@@ -578,9 +565,6 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerDirectSubmi
csr4.setupContext(*osContext4.get());
DirectSubmissionControllerMock controller;
controller.keepControlling.store(false);
controller.directSubmissionControllingThread->join();
controller.directSubmissionControllingThread.reset();
EXPECT_EQ(controller.timeout.count(), 5'000);