Skip to content

Commit 0488c78

Browse files
authored
fix: Init DDI Tables during constructor (#398)
- To address race conditions during multi-threaded calls between threads using both zeInit and zeInitDrivers, set the ddi tables to 0 during the constructor vs during init to esnure the tables are empty before init, but don't get reset twice. Signed-off-by: Neil R. Spruit <[email protected]>
1 parent 5e35e03 commit 0488c78

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

source/lib/ze_lib.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ namespace ze_lib
6464
__zedlllocal context_t::context_t()
6565
{
6666
debugTraceEnabled = getenv_tobool( "ZE_ENABLE_LOADER_DEBUG_TRACE" );
67+
memset(&initialzeDdiTable, 0, sizeof(ze_dditable_t));
68+
memset(&initialzetDdiTable, 0, sizeof(zet_dditable_t));
69+
memset(&initialzesDdiTable, 0, sizeof(zes_dditable_t));
70+
memset(&initialzerDdiTable, 0, sizeof(zer_dditable_t));
6771
};
6872

6973
///////////////////////////////////////////////////////////////////////////////
@@ -211,10 +215,6 @@ namespace ze_lib
211215

212216
if ( ZE_RESULT_SUCCESS == result )
213217
{
214-
memset(&initialzeDdiTable, 0, sizeof(ze_dditable_t));
215-
memset(&initialzetDdiTable, 0, sizeof(zet_dditable_t));
216-
memset(&initialzesDdiTable, 0, sizeof(zes_dditable_t));
217-
memset(&initialzerDdiTable, 0, sizeof(zer_dditable_t));
218218
ze_lib::context->zeDdiTable.exchange(&ze_lib::context->initialzeDdiTable);
219219
ze_lib::context->zetDdiTable.exchange(&ze_lib::context->initialzetDdiTable);
220220
ze_lib::context->zesDdiTable.exchange(&ze_lib::context->initialzesDdiTable);

0 commit comments

Comments
 (0)