From bad0ba8ac88bde2ad92f18d093cde77f686abc67 Mon Sep 17 00:00:00 2001 From: "Chodor, Jaroslaw" Date: Wed, 21 Feb 2018 16:31:53 +0100 Subject: [PATCH] Fixing backup/restore of asynch handler in ULTS Change-Id: If2cbbaa30968ecec3c1bc0361ff86aa523122f21 --- runtime/platform/platform.cpp | 7 ++++--- runtime/platform/platform.h | 2 +- unit_tests/event/async_events_handler_tests.cpp | 7 +++++-- unit_tests/platform/platform_tests.cpp | 2 +- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/runtime/platform/platform.cpp b/runtime/platform/platform.cpp index acd55c6f69..43f8f934b3 100644 --- a/runtime/platform/platform.cpp +++ b/runtime/platform/platform.cpp @@ -45,7 +45,7 @@ Platform *platform() { return &platformImpl; } Platform::Platform() { devices.reserve(64); - createAsyncEventsHandler(new AsyncEventsHandler()); + setAsyncEventsHandler(std::unique_ptr(new AsyncEventsHandler())); } Platform::~Platform() { @@ -238,8 +238,9 @@ AsyncEventsHandler *Platform::getAsyncEventsHandler() { return asyncEventsHandler.get(); } -void Platform::createAsyncEventsHandler(AsyncEventsHandler *handler) { - asyncEventsHandler.reset(handler); +std::unique_ptr Platform::setAsyncEventsHandler(std::unique_ptr handler) { + asyncEventsHandler.swap(handler); + return handler; } } // namespace OCLRT diff --git a/runtime/platform/platform.h b/runtime/platform/platform.h index d453a36e4e..ea5513ef7e 100644 --- a/runtime/platform/platform.h +++ b/runtime/platform/platform.h @@ -66,7 +66,7 @@ class Platform : public BaseObject<_cl_platform_id> { const PlatformInfo &getPlatformInfo() const; AsyncEventsHandler *getAsyncEventsHandler(); - void createAsyncEventsHandler(AsyncEventsHandler *handler); + std::unique_ptr setAsyncEventsHandler(std::unique_ptr handler); protected: enum { diff --git a/unit_tests/event/async_events_handler_tests.cpp b/unit_tests/event/async_events_handler_tests.cpp index 48426c0365..6fc0808a81 100644 --- a/unit_tests/event/async_events_handler_tests.cpp +++ b/unit_tests/event/async_events_handler_tests.cpp @@ -261,19 +261,20 @@ TEST_F(AsyncEventsHandlerTests, callToWakeupAndDeletedWhenDestructed) { TEST_F(AsyncEventsHandlerTests, givenReadyEventWhenCallbackIsAddedThenDontOpenThread) { DebugManager.flags.EnableAsyncEventsHandler.set(true); auto myHandler = new MockHandler(true); - platform()->createAsyncEventsHandler(myHandler); + auto oldHandler = platform()->setAsyncEventsHandler(std::unique_ptr(myHandler)); event1->setTaskStamp(0, 0); event1->addCallback(&this->callbackFcn, CL_SUBMITTED, &counter); EXPECT_EQ(platform()->getAsyncEventsHandler(), myHandler); EXPECT_FALSE(event1->peekHasCallbacks()); EXPECT_FALSE(myHandler->openThreadCalled); + platform()->setAsyncEventsHandler(std::move(oldHandler)); } TEST_F(AsyncEventsHandlerTests, givenUserEventWhenCallbackIsAddedThenDontRegister) { DebugManager.flags.EnableAsyncEventsHandler.set(true); auto myHandler = new MockHandler(true); - platform()->createAsyncEventsHandler(myHandler); + auto oldHandler = platform()->setAsyncEventsHandler(std::unique_ptr(myHandler)); UserEvent userEvent; userEvent.addCallback(&this->callbackFcn, CL_COMPLETE, &counter); @@ -282,6 +283,8 @@ TEST_F(AsyncEventsHandlerTests, givenUserEventWhenCallbackIsAddedThenDontRegiste EXPECT_TRUE(handler->peekIsRegisterListEmpty()); EXPECT_TRUE(userEvent.peekHasCallbacks()); userEvent.decRefInternal(); + + platform()->setAsyncEventsHandler(std::move(oldHandler)); } TEST_F(AsyncEventsHandlerTests, givenRegistredEventsWhenProcessIsCalledThenReturnCandidateWithLowestTaskCount) { diff --git a/unit_tests/platform/platform_tests.cpp b/unit_tests/platform/platform_tests.cpp index ae2c2396fd..dbe68a0dd0 100644 --- a/unit_tests/platform/platform_tests.cpp +++ b/unit_tests/platform/platform_tests.cpp @@ -109,7 +109,7 @@ TEST(PlatformTestSimple, shutdownClosesAsyncEventHandlerThread) { MockHandler *mockAsyncHandler = new MockHandler; - platform->createAsyncEventsHandler(mockAsyncHandler); + auto oldHandler = platform->setAsyncEventsHandler(std::unique_ptr(mockAsyncHandler)); EXPECT_EQ(mockAsyncHandler, platform->getAsyncEventsHandler()); mockAsyncHandler->openThread();