1-
21/*
32 *
43 * Copyright (C) 2019-2021 Intel Corporation
@@ -27,11 +26,14 @@ namespace ze_lib
2726 ze_lib::context = nullptr ;
2827 }
2928 }
29+ #define ZEL_STABILITY_THREAD_STATE_RUNNING 1
30+ #define ZEL_STABILITY_THREAD_STATE_POLLING 0
31+ #define ZEL_STABILITY_THREAD_STATE_SHUTDOWN -1
3032 bool delayContextDestruction = false ;
3133 std::mutex *stabilityMutex = nullptr ;
3234 std::promise<int > *stabilityPromiseResult = nullptr ;
3335 std::future<int > *resultFutureResult = nullptr ;
34- std::atomic<int > *stabilityCheckThreadStarted = nullptr ;
36+ std::atomic<int > *stabilityCheckThreadStatus = nullptr ;
3537 std::thread *stabilityThread = nullptr ;
3638 #endif
3739 bool destruction = false ;
@@ -49,8 +51,8 @@ namespace ze_lib
4951 if (loader) {
5052 FREE_DRIVER_LIBRARY ( loader );
5153 }
52- if (ze_lib::stabilityCheckThreadStarted )
53- ze_lib::stabilityCheckThreadStarted ->store (- 1 );
54+ if (ze_lib::stabilityCheckThreadStatus )
55+ ze_lib::stabilityCheckThreadStatus ->store (ZEL_STABILITY_THREAD_STATE_SHUTDOWN );
5456 try {
5557 if (stabilityThread && stabilityThread->joinable ()) {
5658 stabilityThread->join ();
@@ -74,9 +76,9 @@ namespace ze_lib
7476 delete resultFutureResult;
7577 resultFutureResult = nullptr ;
7678 }
77- if (stabilityCheckThreadStarted ) {
78- delete stabilityCheckThreadStarted ;
79- stabilityCheckThreadStarted = nullptr ;
79+ if (stabilityCheckThreadStatus ) {
80+ delete stabilityCheckThreadStatus ;
81+ stabilityCheckThreadStatus = nullptr ;
8082 }
8183#endif
8284 ze_lib::destruction = true ;
@@ -187,7 +189,7 @@ namespace ze_lib
187189 stabilityMutex = new std::mutex ();
188190 stabilityPromiseResult = new std::promise<int >();
189191 resultFutureResult = new std::future<int >(stabilityPromiseResult->get_future ());
190- stabilityCheckThreadStarted = new std::atomic<int >(0 );
192+ stabilityCheckThreadStatus = new std::atomic<int >(ZEL_STABILITY_THREAD_STATE_POLLING );
191193#else
192194 result = zeLoaderInit ();
193195 if ( ZE_RESULT_SUCCESS == result ) {
@@ -451,6 +453,8 @@ zelSetDelayLoaderContextTeardown()
451453#define ZEL_STABILITY_CHECK_RESULT_EXCEPTION 3
452454// The stability check thread timeout in milliseconds
453455#define ZEL_STABILITY_CHECK_THREAD_TIMEOUT 100
456+ // The stability check thread polling interval in nanoseconds
457+ #define ZEL_STABILITY_CHECK_THREAD_POLLING_INTERVAL 100
454458
455459/* *
456460 * @brief Performs a stability check for the Level Zero loader.
@@ -532,23 +536,23 @@ zelCheckIsLoaderInTearDown() {
532536 std::lock_guard<std::mutex> lock (*ze_lib::stabilityMutex);
533537 *ze_lib::stabilityPromiseResult = std::promise<int >();
534538 *ze_lib::resultFutureResult = ze_lib::stabilityPromiseResult->get_future ();
535- ze_lib::stabilityCheckThreadStarted ->store (1 );
539+ ze_lib::stabilityCheckThreadStatus ->store (ZEL_STABILITY_THREAD_STATE_RUNNING );
536540 std::call_once (stabilityThreadFlag, []() {
537541 ze_lib::stabilityThread = new std::thread ([]() {
538542 while (true ) {
539- while (ze_lib::stabilityCheckThreadStarted && ze_lib::stabilityCheckThreadStarted ->load () == 0 ) {
540- std::this_thread::sleep_for (std::chrono::milliseconds ( 1 ));
543+ while (ze_lib::stabilityCheckThreadStatus && ze_lib::stabilityCheckThreadStatus ->load () == ZEL_STABILITY_THREAD_STATE_POLLING ) {
544+ std::this_thread::sleep_for (std::chrono::nanoseconds (ZEL_STABILITY_CHECK_THREAD_POLLING_INTERVAL ));
541545 }
542546 if (ze_lib::destruction || ze_lib::context == nullptr ) {
543547 break ;
544548 }
545- if (!ze_lib::stabilityCheckThreadStarted ) {
549+ if (!ze_lib::stabilityCheckThreadStatus ) {
546550 break ;
547551 }
548- if (ze_lib::stabilityCheckThreadStarted ->load () == - 1 ) {
552+ if (ze_lib::stabilityCheckThreadStatus ->load () == ZEL_STABILITY_THREAD_STATE_SHUTDOWN ) {
549553 break ;
550554 }
551- ze_lib::stabilityCheckThreadStarted ->store (0 );
555+ ze_lib::stabilityCheckThreadStatus ->store (ZEL_STABILITY_THREAD_STATE_POLLING );
552556 int result = stabilityCheck ();
553557 if (result != ZEL_STABILITY_CHECK_RESULT_SUCCESS) {
554558 if (ze_lib::context->debugTraceEnabled ) {
0 commit comments