ocl: multi-threading: opencl buffer memory guard
This commit is contained in:
parent
96a4a7b339
commit
d650efc069
@ -192,6 +192,7 @@ void openCLMallocPitchEx(Context *ctx, void **dev_ptr, size_t *pitch,
|
||||
clFinish(getClCommandQueue(ctx));
|
||||
#endif
|
||||
CheckBuffers data(mainBuffer, size, widthInBytes, height);
|
||||
cv::AutoLock lock(getInitializationMutex());
|
||||
__check_buffers.insert(std::pair<cl_mem, CheckBuffers>((cl_mem)*dev_ptr, data));
|
||||
}
|
||||
#endif
|
||||
@ -253,10 +254,17 @@ void openCLFree(void *devPtr)
|
||||
bool failBefore = false, failAfter = false;
|
||||
#endif
|
||||
CheckBuffers data;
|
||||
std::map<cl_mem, CheckBuffers>::iterator i = __check_buffers.find((cl_mem)devPtr);
|
||||
if (i != __check_buffers.end())
|
||||
{
|
||||
data = i->second;
|
||||
cv::AutoLock lock(getInitializationMutex());
|
||||
std::map<cl_mem, CheckBuffers>::iterator i = __check_buffers.find((cl_mem)devPtr);
|
||||
if (i != __check_buffers.end())
|
||||
{
|
||||
data = i->second;
|
||||
__check_buffers.erase(i);
|
||||
}
|
||||
}
|
||||
if (data.mainBuffer != NULL)
|
||||
{
|
||||
#ifdef CHECK_MEMORY_CORRUPTION
|
||||
Context* ctx = Context::getContext();
|
||||
std::vector<uchar> checkBefore(__memory_corruption_guard_bytes);
|
||||
@ -286,7 +294,6 @@ void openCLFree(void *devPtr)
|
||||
clFinish(getClCommandQueue(ctx));
|
||||
#endif
|
||||
openCLSafeCall(clReleaseMemObject(data.mainBuffer));
|
||||
__check_buffers.erase(i);
|
||||
}
|
||||
#if defined(CHECK_MEMORY_CORRUPTION)
|
||||
if (failBefore)
|
||||
|
Loading…
x
Reference in New Issue
Block a user