if(!pool->try_pop(buffer)) \r
{\r
executor_.invoke([&]\r
- {\r
+ { \r
try\r
{\r
buffer = std::make_shared<device_buffer>(width, height, stride);\r
}\r
catch(...)\r
{\r
- CASPAR_LOG(info) << "ogl: bad_alloc, retrying.";\r
- gc().wait();\r
- \r
- try\r
- {\r
- buffer = std::make_shared<device_buffer>(width, height, stride);\r
- }\r
- catch(...)\r
- {\r
- BOOST_THROW_EXCEPTION(bad_alloc()\r
- << errinfo_nested_exception(std::current_exception()));\r
- }\r
-\r
+ CASPAR_LOG(error) << L"ogl: create_device_buffer failed!";\r
+ throw;\r
}\r
}, high_priority); \r
}\r
}\r
catch(...)\r
{\r
- CASPAR_LOG(info) << "ogl: bad_alloc, retrying.";\r
- gc().wait();\r
-\r
- try\r
- {\r
- buffer = std::make_shared<host_buffer>(size, usage);\r
- if(usage == host_buffer::write_only)\r
- buffer->map();\r
- else\r
- buffer->unmap(); \r
- }\r
- catch(...)\r
- {\r
- BOOST_THROW_EXCEPTION(bad_alloc()\r
- << errinfo_nested_exception(std::current_exception()));\r
- }\r
+ CASPAR_LOG(error) << L"ogl: create_host_buffer failed!";\r
+ throw; \r
}\r
\r
}, high_priority); \r
pool.clear();\r
BOOST_FOREACH(auto& pool, host_pools_)\r
pool.clear();\r
- });\r
+ }, high_priority);\r
}\r
\r
std::wstring ogl_device::get_version()\r
}\r
catch(...)\r
{\r
- channel_.ogl().gc();\r
+ channel_.ogl().gc().wait();\r
image_mixer_ = image_mixer(channel_);\r
audio_mixer_ = audio_mixer();\r
- channel_.ogl().gc();\r
+ channel_.ogl().gc().wait();\r
\r
CASPAR_LOG_CURRENT_EXCEPTION();\r
return make_safe<read_frame>();\r