Зависание OpenCL на cl :: Разрушение контекста - PullRequest
0 голосов
/ 17 июня 2020

У меня есть следующий объект:

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 работает хорошо, но с ним его замораживание (при отладке) при закрытии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...