@@ -79,23 +79,26 @@ namespace loader
7979 % elif re.match(r " \w + DriverGet$ " , th.make_func_name(n, tags, obj)) or re.match(r " \w + InitDrivers$ " , th.make_func_name(n, tags, obj)):
8080 uint32_t total_driver_handle_count = 0;
8181
82- if (!loader::context->sortingInProgress.exchange(true) && !loader::context->instrumentationEnabled) {
83- % if namespace != " zes" :
84- % if not re.match(r " \w + InitDrivers$ " , th.make_func_name(n, tags, obj)):
85- std::call_once(loader::context->coreDriverSortOnce, []() {
86- loader::context->driverSorting(&loader::context->zeDrivers, nullptr, false);
87- });
88- % else :
89- std::call_once(loader::context->coreDriverSortOnce, [desc]() {
90- loader::context->driverSorting(&loader::context->zeDrivers, desc, false);
91- });
92- %endif
93- % else :
94- std::call_once(loader::context->sysmanDriverSortOnce, []() {
95- loader::context->driverSorting(loader::context->sysmanInstanceDrivers, nullptr, true);
96- });
97- %endif
98- loader::context->sortingInProgress.store(false);
82+ {
83+ std::lock_guard<std::mutex > lock(loader::context->sortMutex);
84+ if (!loader::context->sortingInProgress.exchange(true) && !loader::context->instrumentationEnabled) {
85+ % if namespace != " zes" :
86+ % if not re.match(r " \w + InitDrivers$ " , th.make_func_name(n, tags, obj)):
87+ std::call_once(loader::context->coreDriverSortOnce, []() {
88+ loader::context->driverSorting(&loader::context->zeDrivers, nullptr, false);
89+ });
90+ % else :
91+ std::call_once(loader::context->coreDriverSortOnce, [desc]() {
92+ loader::context->driverSorting(&loader::context->zeDrivers, desc, false);
93+ });
94+ %endif
95+ % else :
96+ std::call_once(loader::context->sysmanDriverSortOnce, []() {
97+ loader::context->driverSorting(loader::context->sysmanInstanceDrivers, nullptr, true);
98+ });
99+ %endif
100+ loader::context->sortingInProgress.store(false);
101+ }
99102 }
100103
101104 % if namespace != " zes" :
0 commit comments