Skip to content

Commit 4acb4e9

Browse files
committed
set/restore valid context in CUDA provider free
1 parent 7dc1422 commit 4acb4e9

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

src/provider/provider_cuda.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,14 @@ static umf_result_t cu_memory_provider_free(void *provider, void *ptr,
433433

434434
cu_memory_provider_t *cu_provider = (cu_memory_provider_t *)provider;
435435

436+
// Remember current context and set the one from the provider
437+
CUcontext restore_ctx = NULL;
438+
umf_result_t umf_result = set_context(cu_provider->context, &restore_ctx);
439+
if (umf_result != UMF_RESULT_SUCCESS) {
440+
LOG_ERR("Failed to set CUDA context, ret = %d", umf_result);
441+
return umf_result;
442+
}
443+
436444
CUresult cu_result = CUDA_SUCCESS;
437445
switch (cu_provider->memory_type) {
438446
case UMF_MEMORY_TYPE_HOST: {
@@ -451,6 +459,11 @@ static umf_result_t cu_memory_provider_free(void *provider, void *ptr,
451459
return UMF_RESULT_ERROR_UNKNOWN;
452460
}
453461

462+
umf_result = set_context(restore_ctx, &restore_ctx);
463+
if (umf_result != UMF_RESULT_SUCCESS) {
464+
LOG_ERR("Failed to restore CUDA context, ret = %d", umf_result);
465+
}
466+
454467
return cu2umf_result(cu_result);
455468
}
456469

0 commit comments

Comments
 (0)