Skip to content

Commit ca374bc

Browse files
committed
use common helper
1 parent 5ef979b commit ca374bc

File tree

5 files changed

+16
-15
lines changed

5 files changed

+16
-15
lines changed

source/adapters/native_cpu/common.hpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#pragma once
1212

1313
#include "ur/ur.hpp"
14+
#include <mutex>
1415

1516
constexpr size_t MaxMessageSize = 256;
1617

@@ -63,8 +64,17 @@ struct _ur_object {
6364

6465
struct RefCounted {
6566
std::atomic_uint32_t _refCount;
67+
std::mutex _mutex;
6668
void incrementReferenceCount() { _refCount++; }
6769
void decrementReferenceCount() { _refCount--; }
6870
RefCounted() : _refCount{1} {}
6971
uint32_t getReferenceCount() const { return _refCount; }
7072
};
73+
74+
template <typename T>
75+
inline void decrementOrDelete(T* refC) {
76+
refC->decrementReferenceCount();
77+
std::lock_guard<std::mutex> lock(refC->_mutex);
78+
if (refC->getReferenceCount() == 0)
79+
delete refC;
80+
}

source/adapters/native_cpu/context.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,13 @@ urContextCreate(uint32_t DeviceCount, const ur_device_handle_t *phDevices,
3232

3333
UR_APIEXPORT ur_result_t UR_APICALL
3434
urContextRetain(ur_context_handle_t hContext) {
35-
std::ignore = hContext;
36-
DIE_NO_IMPLEMENTATION
35+
hContext->incrementReferenceCount();
36+
return UR_RESULT_SUCCESS;
3737
}
3838

3939
UR_APIEXPORT ur_result_t UR_APICALL
4040
urContextRelease(ur_context_handle_t hContext) {
41-
hContext->decrementReferenceCount();
42-
if(hContext->getReferenceCount() == 0)
43-
delete hContext;
41+
decrementOrDelete(hContext);
4442
return UR_RESULT_SUCCESS;
4543
}
4644

source/adapters/native_cpu/kernel.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -182,9 +182,7 @@ 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-
hKernel->decrementReferenceCount();
186-
if(hKernel->getReferenceCount() == 0)
187-
delete hKernel;
185+
decrementOrDelete(hKernel);
188186

189187
return UR_RESULT_SUCCESS;
190188
}

source/adapters/native_cpu/program.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,7 @@ urProgramRetain(ur_program_handle_t hProgram) {
9595

9696
UR_APIEXPORT ur_result_t UR_APICALL
9797
urProgramRelease(ur_program_handle_t hProgram) {
98-
hProgram->decrementReferenceCount();
99-
if(hProgram->getReferenceCount() == 0)
100-
delete hProgram;
101-
98+
decrementOrDelete(hProgram);
10299
return UR_RESULT_SUCCESS;
103100
}
104101

source/adapters/native_cpu/queue.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urQueueRetain(ur_queue_handle_t hQueue) {
4949
}
5050

5151
UR_APIEXPORT ur_result_t UR_APICALL urQueueRelease(ur_queue_handle_t hQueue) {
52-
hQueue->decrementReferenceCount();
53-
if(hQueue->getReferenceCount() == 0)
54-
delete hQueue;
52+
decrementOrDelete(hQueue);
5553

5654
return UR_RESULT_SUCCESS;
5755
}

0 commit comments

Comments
 (0)