mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-21 09:14:47 +08:00
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:
committed by
Compute-Runtime-Automation
parent
707796a50d
commit
295b58a11f
@@ -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);
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@ class DirectSubmissionController {
|
||||
void registerDirectSubmission(CommandStreamReceiver *csr);
|
||||
void unregisterDirectSubmission(CommandStreamReceiver *csr);
|
||||
|
||||
void startThread();
|
||||
void startControlling();
|
||||
|
||||
static bool isSupported();
|
||||
|
||||
@@ -120,6 +120,7 @@ DirectSubmissionController *ExecutionEnvironment::initializeDirectSubmissionCont
|
||||
|
||||
if (initializeDirectSubmissionController && this->directSubmissionController == nullptr) {
|
||||
this->directSubmissionController = std::make_unique<DirectSubmissionController>();
|
||||
this->directSubmissionController->startThread();
|
||||
}
|
||||
|
||||
return directSubmissionController.get();
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user