@@ -890,13 +890,14 @@ urEventRelease(/** [in] handle of the event object */ ur_event_handle_t Event) {
890
890
(Event->CommandType == UR_COMMAND_EVENTS_WAIT ||
891
891
Event->CommandType == UR_COMMAND_EVENTS_WAIT_WITH_BARRIER) &&
892
892
Event->Completed ;
893
- UR_CALL (urEventReleaseInternal (Event));
893
+ bool isEventDeleted = false ;
894
+ UR_CALL (urEventReleaseInternal (Event, &isEventDeleted));
894
895
// If this is a Completed Event Wait Out Event, then we need to cleanup the
895
896
// event at user release and not at the time of completion.
896
897
// If the event is labelled as completed and no additional references are
897
898
// removed, then we still need to decrement the event, but not mark as
898
899
// completed.
899
- if (isEventsWaitCompleted) {
900
+ if (isEventsWaitCompleted & !isEventDeleted ) {
900
901
if (Event->CleanedUp ) {
901
902
UR_CALL (urEventReleaseInternal (Event));
902
903
} else {
@@ -1087,12 +1088,13 @@ ur_event_handle_t_::~ur_event_handle_t_() {
1087
1088
}
1088
1089
}
1089
1090
1090
- ur_result_t urEventReleaseInternal (ur_event_handle_t Event) {
1091
+ ur_result_t urEventReleaseInternal (ur_event_handle_t Event,
1092
+ bool *isEventDeleted) {
1091
1093
if (!Event->RefCount .decrementAndTest ())
1092
1094
return UR_RESULT_SUCCESS;
1093
1095
1094
1096
if (Event->OriginAllocEvent ) {
1095
- urEventReleaseInternal (Event->OriginAllocEvent );
1097
+ urEventReleaseInternal (Event->OriginAllocEvent , isEventDeleted );
1096
1098
}
1097
1099
1098
1100
if (Event->CommandType == UR_COMMAND_MEM_UNMAP && Event->CommandData ) {
@@ -1133,7 +1135,7 @@ ur_result_t urEventReleaseInternal(ur_event_handle_t Event) {
1133
1135
// and release a reference to it.
1134
1136
if (Event->HostVisibleEvent && Event->HostVisibleEvent != Event) {
1135
1137
// Decrement ref-count of the host-visible proxy event.
1136
- UR_CALL (urEventReleaseInternal (Event->HostVisibleEvent ));
1138
+ UR_CALL (urEventReleaseInternal (Event->HostVisibleEvent , isEventDeleted ));
1137
1139
}
1138
1140
1139
1141
// Save pointer to the queue before deleting/resetting event.
@@ -1162,6 +1164,9 @@ ur_result_t urEventReleaseInternal(ur_event_handle_t Event) {
1162
1164
// must released later.
1163
1165
if (DisableEventsCaching || !Event->OwnNativeHandle ) {
1164
1166
delete Event;
1167
+ if (isEventDeleted) {
1168
+ *isEventDeleted = true ;
1169
+ }
1165
1170
} else {
1166
1171
Event->Context ->addEventToContextCache (Event);
1167
1172
}
0 commit comments