У меня есть следующий объект:
class Manager
{
cl::context m_context;
cl::CommandQueue m_queue
// ... more stuff obviously.
public:
~Manager() {
m_queue.finish();
m_queue = nullptr;
m_context = nullptr;
}
};
Это отлично работает. Но когда я добавляю немного DestructorCallback к своим cl::Buffer
s, программа зависает при выпуске cl::context
.
cl::int err;
auto buffer = cl::Buffer(manager->GetContext(), CL_MEM_READ_WRITE, 1000, NULL, &err);
char* ptr = new char[10];
ptr[0] = 'a';
buffer.setDestructorCallback(Utils::Function::setDestroyBufferCallback, (void*)(ptr));
И функция обратного вызова выглядит так:
void Utils::Function::setDestroyBufferCallback(cl_mem buffer, void* data)
{
std::cout << "Destroy cl::Buffer with name: " << std::string(data) << std::endl;
delete data;
}
Я не понимаю, я правильно удаляю весь буфер, прежде чем добраться до этой точки, но все же.
То же приложение без DestructionCallback работает хорошо, но с ним его замораживание (при отладке) при закрытии.