@@ -890,13 +890,14 @@ urEventRelease(/** [in] handle of the event object */ ur_event_handle_t Event) {
890890 (Event->CommandType == UR_COMMAND_EVENTS_WAIT ||
891891 Event->CommandType == UR_COMMAND_EVENTS_WAIT_WITH_BARRIER) &&
892892 Event->Completed ;
893- UR_CALL (urEventReleaseInternal (Event));
893+ bool isEventDeleted = false ;
894+ UR_CALL (urEventReleaseInternal (Event, &isEventDeleted));
894895 // If this is a Completed Event Wait Out Event, then we need to cleanup the
895896 // event at user release and not at the time of completion.
896897 // If the event is labelled as completed and no additional references are
897898 // removed, then we still need to decrement the event, but not mark as
898899 // completed.
899- if (isEventsWaitCompleted) {
900+ if (isEventsWaitCompleted & !isEventDeleted ) {
900901 if (Event->CleanedUp ) {
901902 UR_CALL (urEventReleaseInternal (Event));
902903 } else {
@@ -1087,12 +1088,13 @@ ur_event_handle_t_::~ur_event_handle_t_() {
10871088 }
10881089}
10891090
1090- ur_result_t urEventReleaseInternal (ur_event_handle_t Event) {
1091+ ur_result_t urEventReleaseInternal (ur_event_handle_t Event,
1092+ bool *isEventDeleted) {
10911093 if (!Event->RefCount .decrementAndTest ())
10921094 return UR_RESULT_SUCCESS;
10931095
10941096 if (Event->OriginAllocEvent ) {
1095- urEventReleaseInternal (Event->OriginAllocEvent );
1097+ urEventReleaseInternal (Event->OriginAllocEvent , isEventDeleted );
10961098 }
10971099
10981100 if (Event->CommandType == UR_COMMAND_MEM_UNMAP && Event->CommandData ) {
@@ -1133,7 +1135,7 @@ ur_result_t urEventReleaseInternal(ur_event_handle_t Event) {
11331135 // and release a reference to it.
11341136 if (Event->HostVisibleEvent && Event->HostVisibleEvent != Event) {
11351137 // Decrement ref-count of the host-visible proxy event.
1136- UR_CALL (urEventReleaseInternal (Event->HostVisibleEvent ));
1138+ UR_CALL (urEventReleaseInternal (Event->HostVisibleEvent , isEventDeleted ));
11371139 }
11381140
11391141 // Save pointer to the queue before deleting/resetting event.
@@ -1162,6 +1164,9 @@ ur_result_t urEventReleaseInternal(ur_event_handle_t Event) {
11621164 // must released later.
11631165 if (DisableEventsCaching || !Event->OwnNativeHandle ) {
11641166 delete Event;
1167+ if (isEventDeleted) {
1168+ *isEventDeleted = true ;
1169+ }
11651170 } else {
11661171 Event->Context ->addEventToContextCache (Event);
11671172 }
0 commit comments