Skip to content

Conversation

@kekaczma
Copy link

@kekaczma kekaczma commented Dec 12, 2025

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

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);
Copy link
Contributor

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.

@github-actions
Copy link
Contributor

@intel/llvm-gatekeepers please consider merging

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Coverity][UR] Potentially throwing function is called from a destructor

4 participants