Skip to content

Commit 3c1d342

Browse files
[SYCL] Fix memory leak for interop events created from native handle (#6180)
1 parent 4e09dbf commit 3c1d342

File tree

3 files changed

+12
-3
lines changed

3 files changed

+12
-3
lines changed

sycl/plugins/level_zero/pi_level_zero.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5688,6 +5688,13 @@ pi_result piextEventCreateWithNativeHandle(pi_native_handle NativeHandle,
56885688
// need to create a host-visible proxy for it.
56895689
(*Event)->HostVisibleEvent = *Event;
56905690

5691+
// Unlike regular events managed by SYCL RT we don't have to wait for interop
5692+
// events completion, and not need to do the their `cleanup()`. This in
5693+
// particular guarantees that the extra `piEventRelease` is not called on
5694+
// them. That release is needed to match the `piEventRetain` of regular events
5695+
// made for waiting for event completion, but not this interop event.
5696+
(*Event)->CleanedUp = true;
5697+
56915698
return PI_SUCCESS;
56925699
}
56935700

sycl/source/backend.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,12 @@ __SYCL_EXPORT event make_event(pi_native_handle NativeHandle,
130130
Plugin.call<PiApiKind::piextEventCreateWithNativeHandle>(
131131
NativeHandle, ContextImpl->getHandleRef(), !KeepOwnership, &PiEvent);
132132

133-
return detail::createSyclObjFromImpl<event>(
133+
event Event = detail::createSyclObjFromImpl<event>(
134134
std::make_shared<event_impl>(PiEvent, Context));
135+
136+
if (Backend == backend::opencl)
137+
Plugin.call<PiApiKind::piEventRetain>(PiEvent);
138+
return Event;
135139
}
136140

137141
std::shared_ptr<detail::kernel_bundle_impl>

sycl/source/detail/event_impl.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,6 @@ event_impl::event_impl(RT::PiEvent Event, const context &SyclContext)
123123
"clEvent.",
124124
PI_INVALID_CONTEXT);
125125
}
126-
127-
getPlugin().call<PiApiKind::piEventRetain>(MEvent);
128126
}
129127

130128
event_impl::event_impl(const QueueImplPtr &Queue)

0 commit comments

Comments
 (0)