Skip to content

Commit

Permalink
[Loader] Supress system errors when loading adapters on Windows.
Browse files Browse the repository at this point in the history
  • Loading branch information
martygrant committed Sep 13, 2024
1 parent 92638b2 commit d7ac3dd
Showing 1 changed file with 17 additions and 0 deletions.
17 changes: 17 additions & 0 deletions source/loader/ur_loader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,19 @@ namespace ur_loader {
context_t *getContext() { return context_t::get_direct(); }

ur_result_t context_t::init() {
#ifdef _WIN32
// Suppress system errors.
// Tells the system to not display the critical-error-handler message box.
// Instead, the system sends the error to the calling process.
// This is crucial for graceful handling of plugins that couldn't be
// loaded, e.g. due to missing native run-times.
// Sometimes affects L0 or the unified runtime.
// TODO: add reporting in case of an error.
// NOTE: we restore the old mode to not affect user app behavior.
// See https://github.com/intel/llvm/blob/sycl/sycl/ur_win_proxy_loader/ur_win_proxy_loader.cpp (preloadLibraries())
UINT SavedMode = SetErrorMode(SEM_FAILCRITICALERRORS);
#endif

#ifdef UR_STATIC_ADAPTER_LEVEL_ZERO
// If the adapters were force loaded, it means the user wants to use
// a specific adapter library. Don't load any static adapters.
Expand All @@ -35,6 +48,10 @@ ur_result_t context_t::init() {
}
}
}
#ifdef _WIN32
// Restore system error handling.
(void)SetErrorMode(SavedMode);
#endif

forceIntercept = getenv_tobool("UR_ENABLE_LOADER_INTERCEPT");

Expand Down

0 comments on commit d7ac3dd

Please sign in to comment.