Skip to content

Commit 5ef979b

Browse files
committed
Correctly implement reference counting for Native CPU
1 parent 04799e7 commit 5ef979b

File tree

6 files changed

+19
-7
lines changed

6 files changed

+19
-7
lines changed

source/adapters/native_cpu/context.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ urContextRetain(ur_context_handle_t hContext) {
3838

3939
UR_APIEXPORT ur_result_t UR_APICALL
4040
urContextRelease(ur_context_handle_t hContext) {
41-
delete hContext;
41+
hContext->decrementReferenceCount();
42+
if(hContext->getReferenceCount() == 0)
43+
delete hContext;
4244
return UR_RESULT_SUCCESS;
4345
}
4446

source/adapters/native_cpu/context.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@
1313
#include <ur_api.h>
1414

1515
#include "device.hpp"
16+
#include "common.hpp"
1617

17-
struct ur_context_handle_t_ {
18+
struct ur_context_handle_t_ : RefCounted {
1819
ur_context_handle_t_(ur_device_handle_t_ *phDevices) : _device{phDevices} {}
1920

2021
ur_device_handle_t _device;

source/adapters/native_cpu/kernel.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,9 @@ UR_APIEXPORT ur_result_t UR_APICALL urKernelRetain(ur_kernel_handle_t hKernel) {
182182

183183
UR_APIEXPORT ur_result_t UR_APICALL
184184
urKernelRelease(ur_kernel_handle_t hKernel) {
185-
delete hKernel;
185+
hKernel->decrementReferenceCount();
186+
if(hKernel->getReferenceCount() == 0)
187+
delete hKernel;
186188

187189
return UR_RESULT_SUCCESS;
188190
}

source/adapters/native_cpu/program.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,9 @@ urProgramRetain(ur_program_handle_t hProgram) {
9595

9696
UR_APIEXPORT ur_result_t UR_APICALL
9797
urProgramRelease(ur_program_handle_t hProgram) {
98-
delete hProgram;
98+
hProgram->decrementReferenceCount();
99+
if(hProgram->getReferenceCount() == 0)
100+
delete hProgram;
99101

100102
return UR_RESULT_SUCCESS;
101103
}

source/adapters/native_cpu/queue.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,16 @@ UR_APIEXPORT ur_result_t UR_APICALL urQueueCreate(
4343

4444
UR_APIEXPORT ur_result_t UR_APICALL urQueueRetain(ur_queue_handle_t hQueue) {
4545
std::ignore = hQueue;
46+
hQueue->incrementReferenceCount();
4647

47-
DIE_NO_IMPLEMENTATION;
48+
return UR_RESULT_SUCCESS;
4849
}
4950

5051
UR_APIEXPORT ur_result_t UR_APICALL urQueueRelease(ur_queue_handle_t hQueue) {
51-
delete hQueue;
52+
hQueue->decrementReferenceCount();
53+
if(hQueue->getReferenceCount() == 0)
54+
delete hQueue;
55+
5256
return UR_RESULT_SUCCESS;
5357
}
5458

source/adapters/native_cpu/queue.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
//
99
//===----------------------------------------------------------------------===//
1010
#pragma once
11+
#include "common.hpp"
1112

12-
struct ur_queue_handle_t_ {};
13+
struct ur_queue_handle_t_ : RefCounted {};

0 commit comments

Comments
 (0)