Improve error handling for shared objects.

Change-Id: I86fccb26cbf327b49c1b4992eeb3d25e52d3bced
This commit is contained in:
Zdunowski, Piotr
2018-01-17 17:02:08 +01:00
committed by sys_ocldev
parent e2680d395c
commit 5e7eccefe5
2 changed files with 120 additions and 2 deletions

View File

@@ -332,9 +332,16 @@ LinearStream &CommandQueue::getCS(size_t minRequiredSize) {
}
cl_int CommandQueue::enqueueAcquireSharedObjects(cl_uint numObjects, const cl_mem *memObjects, cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *oclEvent, cl_uint cmdType) {
if ((memObjects == nullptr && numObjects != 0) || (memObjects != nullptr && numObjects == 0)) {
return CL_INVALID_VALUE;
}
for (unsigned int object = 0; object < numObjects; object++) {
auto memObject = castToObjectOrAbort<MemObj>(memObjects[object]);
auto memObject = castToObject<MemObj>(memObjects[object]);
if (memObject == nullptr || memObject->peekSharingHandler() == nullptr) {
return CL_INVALID_MEM_OBJECT;
}
memObject->peekSharingHandler()->acquire(memObject);
memObject->acquireCount++;
}
@@ -351,8 +358,16 @@ cl_int CommandQueue::enqueueAcquireSharedObjects(cl_uint numObjects, const cl_me
}
cl_int CommandQueue::enqueueReleaseSharedObjects(cl_uint numObjects, const cl_mem *memObjects, cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *oclEvent, cl_uint cmdType) {
if ((memObjects == nullptr && numObjects != 0) || (memObjects != nullptr && numObjects == 0)) {
return CL_INVALID_VALUE;
}
for (unsigned int object = 0; object < numObjects; object++) {
auto memObject = castToObjectOrAbort<MemObj>(memObjects[object]);
auto memObject = castToObject<MemObj>(memObjects[object]);
if (memObject == nullptr || memObject->peekSharingHandler() == nullptr) {
return CL_INVALID_MEM_OBJECT;
}
memObject->peekSharingHandler()->release(memObject);
DEBUG_BREAK_IF(memObject->acquireCount <= 0);
memObject->acquireCount--;