Skip to content

Commit 70ebc88

Browse files
committed
Add python object creation for unboxing SyclEvent
1 parent 08bd841 commit 70ebc88

File tree

1 file changed

+17
-18
lines changed

1 file changed

+17
-18
lines changed

numba_dpex/core/runtime/_dpexrt_python.c

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1384,33 +1384,32 @@ static int DPEXRT_sycl_event_from_python(NRT_api_functions *nrt,
13841384
static PyObject *DPEXRT_sycl_event_to_python(NRT_api_functions *nrt,
13851385
eventstruct_t *eventstruct)
13861386
{
1387-
PyObject *orig_event = NULL;
1387+
PyObject *event_obj = NULL;
13881388
PyGILState_STATE gstate;
13891389

1390-
orig_event = nrt->get_data(eventstruct->meminfo);
1391-
// FIXME: Better error checking is needed to enforce the boxing of the event
1392-
// object. For now, only the minimal is done as the returning of SyclEvent
1393-
// from a dpjit function should not be a used often and the dpctl C API for
1394-
// type checking etc. is not ready.
1395-
if (orig_event == NULL) {
1396-
PyErr_Format(PyExc_ValueError,
1397-
"In 'box_from_eventstruct_parent', "
1398-
"failed to create a new dpctl.SyclEvent object.");
1399-
return NULL;
1400-
}
1390+
event_obj = nrt->get_data(eventstruct->meminfo);
14011391

14021392
DPEXRT_DEBUG(
14031393
drt_debug_print("DPEXRT-DEBUG: In DPEXRT_sycl_event_to_python.\n"););
14041394

1405-
// TODO: is there any way to release meminfo without calling dtor so we dont
1406-
// call incref, decref one after another.
1407-
// We need to increase reference count because we are returning new
1408-
// reference to the same event.
1409-
Py_INCREF(orig_event);
1395+
if (event_obj == NULL) {
1396+
// Make create copy of event_ref so we don't need to manage nrt lifetime
1397+
// from python object.
1398+
event_obj = SyclEvent_Make(eventstruct->event_ref);
1399+
}
1400+
else {
1401+
// Unfortunately we can not optimize (nrt->release that triggers
1402+
// Py_DECREF() from the destructor) and Py_INCREF() because nrt may need
1403+
// the object even if we return it to python.
1404+
// We need to increase reference count because we are returning new
1405+
// reference to the same event.
1406+
Py_INCREF(event_obj);
1407+
}
1408+
14101409
// We need to release meminfo since we are taking ownership back.
14111410
nrt->release(eventstruct->meminfo);
14121411

1413-
return orig_event;
1412+
return event_obj;
14141413
}
14151414

14161415
/*----------------------------------------------------------------------------*/

0 commit comments

Comments
 (0)