-
Notifications
You must be signed in to change notification settings - Fork 802
[UR][HIP] Make ur_context_handle_t_ destructor non-throwing #20887
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: sycl
Are you sure you want to change the base?
Conversation
UR_CHECK_ERROR may throw or abort, which is unsafe to use from a destructor. If an exception escapes during stack unwinding, std::terminate would be called. Replace UR_CHECK_ERROR in ur_context_handle_t_ destructor with a non-throwing, best-effort cleanup. In debug builds, failures are reported via assert/log, while release builds avoid throwing from the destructor. This fixes Coverity CID 519631, issue: [Coverity][UR] Potentially throwing function is called from a destructor
Make the CUDA context destructor non-throwing by catching exceptions and using best-effort cleanup with logging and debug asserts. Related to Coverity CID 519631.
urAdapterRelease() always returns UR_RESULT_SUCCESS, making the error-checking code unreachable dead code. Exceptions from the call are already handled by the catch-all block.
| if (MemoryProviderHost) { | ||
| umfMemoryProviderDestroy(MemoryProviderHost); | ||
| } | ||
| urAdapterRelease(ur::cuda::adapter); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think any of those functions (umfPoolDestroy/umfMemoryProviderDestroy/urAdapterRelease) can throw a reasonable exception. Since urAdapterRelease isn't wrapped with UR_CHECK_ERROR the try catch block seems redundant.
|
@intel/llvm-gatekeepers please consider merging |
1 similar comment
|
@intel/llvm-gatekeepers please consider merging |
UR_CHECK_ERROR may throw or abort, which is unsafe to use from a destructor. If an exception escapes during stack unwinding, std::terminate would be called.
Replace UR_CHECK_ERROR in ur_context_handle_t_ destructor with a non-throwing, best-effort cleanup. In debug builds, failures are reported via assert/log, while release builds avoid throwing from the destructor.
fixes: #20811