@@ -81,23 +81,26 @@ namespace loader
8181 % 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)):
8282 uint32_t total_driver_handle_count = 0;
8383
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);
84+ {
85+ std::lock_guard<std::mutex > lock(loader::context->sortMutex);
86+ if (!loader::context->sortingInProgress.exchange(true) && !loader::context->instrumentationEnabled) {
87+ % if namespace != " zes" :
88+ % if not re.match(r " \w + InitDrivers$ " , th.make_func_name(n, tags, obj)):
89+ std::call_once(loader::context->coreDriverSortOnce, []() {
90+ loader::context->driverSorting(&loader::context->zeDrivers, nullptr, false);
91+ });
92+ % else :
93+ std::call_once(loader::context->coreDriverSortOnce, [desc]() {
94+ loader::context->driverSorting(&loader::context->zeDrivers, desc, false);
95+ });
96+ %endif
97+ % else :
98+ std::call_once(loader::context->sysmanDriverSortOnce, []() {
99+ loader::context->driverSorting(loader::context->sysmanInstanceDrivers, nullptr, true);
100+ });
101+ %endif
102+ loader::context->sortingInProgress.store(false);
103+ }
101104 }
102105
103106 % if namespace != " zes" :
0 commit comments