Skip to content

Commit eda83a2

Browse files
authored
Merge pull request #2573 from oneapi-src/ross/leakfix
Fix memory leak in loader urEventSetCallback
2 parents 572e1ee + 4d44f00 commit eda83a2

File tree

2 files changed

+17
-16
lines changed

2 files changed

+17
-16
lines changed

scripts/templates/ldrddi.cpp.mako

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,6 @@ namespace ur_loader
6565
%>${th.get_initial_null_set(obj)}
6666

6767
[[maybe_unused]] auto context = getContext();
68-
%if func_basename == "EventSetCallback":
69-
70-
// Replace the callback with a wrapper function that gives the callback the loader event rather than a
71-
// backend-specific event
72-
auto wrapper_data =
73-
new event_callback_wrapper_data_t{pfnNotify, hEvent, pUserData};
74-
pUserData = wrapper_data;
75-
pfnNotify = event_callback_wrapper;
76-
%endif
7768
%if func_basename == "AdapterGet":
7869

7970
size_t adapterIndex = 0;
@@ -165,6 +156,16 @@ namespace ur_loader
165156
<%break%>
166157
%endif
167158
%endfor
159+
%if func_basename == "EventSetCallback":
160+
161+
// Replace the callback with a wrapper function that gives the callback the loader event rather than a
162+
// backend-specific event
163+
auto *wrapper_data =
164+
new event_callback_wrapper_data_t{pfnNotify, hEvent, pUserData};
165+
pUserData = wrapper_data;
166+
pfnNotify = event_callback_wrapper;
167+
168+
%endif
168169
%for i, item in enumerate(th.get_loader_prologue(n, tags, obj, meta)):
169170
%if 'range' in item:
170171
<%

source/loader/ur_ldrddi.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4506,20 +4506,20 @@ __urdlllocal ur_result_t UR_APICALL urEventSetCallback(
45064506

45074507
[[maybe_unused]] auto context = getContext();
45084508

4509-
// Replace the callback with a wrapper function that gives the callback the loader event rather than a
4510-
// backend-specific event
4511-
auto wrapper_data =
4512-
new event_callback_wrapper_data_t{pfnNotify, hEvent, pUserData};
4513-
pUserData = wrapper_data;
4514-
pfnNotify = event_callback_wrapper;
4515-
45164509
// extract platform's function pointer table
45174510
auto dditable = reinterpret_cast<ur_event_object_t *>(hEvent)->dditable;
45184511
auto pfnSetCallback = dditable->ur.Event.pfnSetCallback;
45194512
if (nullptr == pfnSetCallback) {
45204513
return UR_RESULT_ERROR_UNINITIALIZED;
45214514
}
45224515

4516+
// Replace the callback with a wrapper function that gives the callback the loader event rather than a
4517+
// backend-specific event
4518+
auto *wrapper_data =
4519+
new event_callback_wrapper_data_t{pfnNotify, hEvent, pUserData};
4520+
pUserData = wrapper_data;
4521+
pfnNotify = event_callback_wrapper;
4522+
45234523
// convert loader handle to platform handle
45244524
hEvent = reinterpret_cast<ur_event_object_t *>(hEvent)->handle;
45254525

0 commit comments

Comments
 (0)