ocl: multi-threading: opencl buffer memory guard
This commit is contained in:
		| @@ -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) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Alexander Alekhin
					Alexander Alekhin