Skip to content

Commit 0938386

Browse files
author
Martin Wehking
committed
Fix thread-safe destruction of cached events
Use a mutex to make the emptiness check and retrieval of cached events atomic.
1 parent ed75dc7 commit 0938386

File tree

3 files changed

+8
-5
lines changed

3 files changed

+8
-5
lines changed

source/adapters/cuda/queue.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@ ur_queue_handle_t_::~ur_queue_handle_t_() {
3636
urContextRelease(Context);
3737
urDeviceRelease(Device);
3838

39-
while (has_cached_events()) {
40-
get_cached_event();
39+
std::lock_guard<std::mutex> CacheGuard(CacheMutex);
40+
while (!CachedEvents.empty()) {
41+
std::unique_ptr<ur_event_handle_t_> Ev{CachedEvents.top()};
42+
CachedEvents.pop();
4143
}
4244
}
4345

source/adapters/hip/event.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,6 @@ UR_APIEXPORT ur_result_t UR_APICALL urEventRelease(ur_event_handle_t hEvent) {
297297
// decrement ref count. If it is 0, delete the event.
298298
if (hEvent->decrementReferenceCount() == 0) {
299299
std::unique_ptr<ur_event_handle_t_> event_ptr{hEvent};
300-
ur_result_t Result = UR_RESULT_ERROR_INVALID_EVENT;
301300
try {
302301
if (!hEvent->backendHasOwnership()) {
303302
return UR_RESULT_SUCCESS;

source/adapters/hip/queue.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@ ur_queue_handle_t_::~ur_queue_handle_t_() {
3232
urContextRelease(Context);
3333
urDeviceRelease(Device);
3434

35-
while (has_cached_events()) {
36-
get_cached_event();
35+
std::lock_guard<std::mutex> CacheGuard(CacheMutex);
36+
while (!CachedEvents.empty()) {
37+
std::unique_ptr<ur_event_handle_t_> Ev{CachedEvents.top()};
38+
CachedEvents.pop();
3739
}
3840
}
3941

0 commit comments

Comments
 (0)