-
-
Notifications
You must be signed in to change notification settings - Fork 56.5k
OpenCLExecutionContext::create takes ownership of OpenCL context and device #20518
Description
System information (version)
- OpenCV => 4.5.3-dev (424eaba)
- Operating System / Platform =>Linux
- Compiler => GCC
Detailed description
OpenCLExecutionContext::create() requires the OpenCL context and device as arguments, so my assumption is that the caller retains ownership of them.
However, if OpenCLExecutionContext::create is called from within a thread that subsequently exists, OpenCV will release the OpenCL context and device that was passed to it. This means that there will be memory errors in other threads that did not expect the OpenCL context/device to be released.
Steps to reproduce
- in main thread, create an OpenCL context and device (independently of OpenCV)
- start a second thread, passing it the OpenCL context and device
- In the second thread, call
OpenCLExecutionContext::create()with the existing OpenCL context and device - In the main thread, join the second thread. Notice that the OpenCL context has been released.
There is a reproduction in this branch: https://github.com/opencv/opencv/compare/master...hedgepigdaniel:repro/opencl-free?expand=1
To run the reproduction:
$ cmake build -S . -DWITH_OPENCL=ON -DBUILD_EXAMPLES=ON -DCMAKE_BUILD_TYPE=Debug
$ $(cd build && make)
$ build/bin/example_reproduction_opencl-free Running the reproduction in Valgrind produces the following output:
Initialising OpenCV OpenCL context with platform "Intel(R) OpenCL HD Graphics"
[ INFO:0] global /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp (1172) haveOpenCL Initialize OpenCL runtime...
[ INFO:0] global /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp (1178) haveOpenCL OpenCL: found 2 platforms
==179605== Invalid read of size 8
==179605== at 0x5AA9FB8: clReleaseContext (in /usr/lib/libOpenCL.so.1.0.0)
==179605== by 0x10AD07: main (opencl-free.cpp:130)
==179605== Address 0xd374c80 is 16 bytes inside a block of size 440 free'd
==179605== at 0x48419AB: operator delete(void*, unsigned long) (vg_replace_malloc.c:814)
==179605== by 0xD3FA41B: ??? (in /usr/lib/intel-opencl/libigdrcl.so)
==179605== by 0x5AA9FC1: clReleaseContext (in /usr/lib/libOpenCL.so.1.0.0)
==179605== by 0x4BC164B: cv::ocl::Context::Impl::~Impl() (ocl.cpp:2389)
==179605== by 0x4BC37F9: cv::ocl::Context::Impl::release() (ocl.cpp:2670)
==179605== by 0x4BC3D47: cv::ocl::Context::release() (ocl.cpp:2888)
==179605== by 0x4BC3CE9: cv::ocl::Context::~Context() (ocl.cpp:2874)
==179605== by 0x4BFA47C: cv::ocl::OpenCLExecutionContext::Impl::~Impl() (ocl.cpp:833)
==179605== by 0x4BFA49C: void __gnu_cxx::new_allocator<cv::ocl::OpenCLExecutionContext::Impl>::destroy<cv::ocl::OpenCLExecutionContext::Impl>(cv::ocl::OpenCLExecutionContext::Impl*) (new_allocator.h:162)
==179605== by 0x4BFA3C5: void std::allocator_traits<std::allocator<cv::ocl::OpenCLExecutionContext::Impl> >::destroy<cv::ocl::OpenCLExecutionContext::Impl>(std::allocator<cv::ocl::OpenCLExecutionContext::Impl>&, cv::ocl::OpenCLExecutionContext::Impl*) (alloc_traits.h:531)
==179605== by 0x4BFA19D: std::_Sp_counted_ptr_inplace<cv::ocl::OpenCLExecutionContext::Impl, std::allocator<cv::ocl::OpenCLExecutionContext::Impl>, (__gnu_cxx::_Lock_policy)2>::_M_dispose() (shared_ptr_base.h:528)
==179605== by 0x49A6A77: std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() (shared_ptr_base.h:168)
==179605== Block was alloc'd at
==179605== at 0x483EF3F: operator new(unsigned long) (vg_replace_malloc.c:417)
==179605== by 0xD41615B: ??? (in /usr/lib/intel-opencl/libigdrcl.so)
==179605== by 0x5AA44B6: clCreateContext (in /usr/lib/libOpenCL.so.1.0.0)
==179605== by 0x10A858: create_opencl_context(_cl_platform_id**, _cl_device_id**, _cl_context**) (opencl-free.cpp:45)
==179605== by 0x10ACC7: main (opencl-free.cpp:116)
==179605==
==179605== Invalid read of size 8
==179605== at 0xD3FA216: ??? (in /usr/lib/intel-opencl/libigdrcl.so)
==179605== by 0x5AA9FC1: clReleaseContext (in /usr/lib/libOpenCL.so.1.0.0)
==179605== by 0x10AD07: main (opencl-free.cpp:130)
==179605== Address 0xd374c98 is 40 bytes inside a block of size 440 free'd
==179605== at 0x48419AB: operator delete(void*, unsigned long) (vg_replace_malloc.c:814)
==179605== by 0xD3FA41B: ??? (in /usr/lib/intel-opencl/libigdrcl.so)
==179605== by 0x5AA9FC1: clReleaseContext (in /usr/lib/libOpenCL.so.1.0.0)
==179605== by 0x4BC164B: cv::ocl::Context::Impl::~Impl() (ocl.cpp:2389)
==179605== by 0x4BC37F9: cv::ocl::Context::Impl::release() (ocl.cpp:2670)
==179605== by 0x4BC3D47: cv::ocl::Context::release() (ocl.cpp:2888)
==179605== by 0x4BC3CE9: cv::ocl::Context::~Context() (ocl.cpp:2874)
==179605== by 0x4BFA47C: cv::ocl::OpenCLExecutionContext::Impl::~Impl() (ocl.cpp:833)
==179605== by 0x4BFA49C: void __gnu_cxx::new_allocator<cv::ocl::OpenCLExecutionContext::Impl>::destroy<cv::ocl::OpenCLExecutionContext::Impl>(cv::ocl::OpenCLExecutionContext::Impl*) (new_allocator.h:162)
==179605== by 0x4BFA3C5: void std::allocator_traits<std::allocator<cv::ocl::OpenCLExecutionContext::Impl> >::destroy<cv::ocl::OpenCLExecutionContext::Impl>(std::allocator<cv::ocl::OpenCLExecutionContext::Impl>&, cv::ocl::OpenCLExecutionContext::Impl*) (alloc_traits.h:531)
==179605== by 0x4BFA19D: std::_Sp_counted_ptr_inplace<cv::ocl::OpenCLExecutionContext::Impl, std::allocator<cv::ocl::OpenCLExecutionContext::Impl>, (__gnu_cxx::_Lock_policy)2>::_M_dispose() (shared_ptr_base.h:528)
==179605== by 0x49A6A77: std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() (shared_ptr_base.h:168)
==179605== Block was alloc'd at
==179605== at 0x483EF3F: operator new(unsigned long) (vg_replace_malloc.c:417)
==179605== by 0xD41615B: ??? (in /usr/lib/intel-opencl/libigdrcl.so)
==179605== by 0x5AA44B6: clCreateContext (in /usr/lib/libOpenCL.so.1.0.0)
==179605== by 0x10A858: create_opencl_context(_cl_platform_id**, _cl_device_id**, _cl_context**) (opencl-free.cpp:45)
==179605== by 0x10ACC7: main (opencl-free.cpp:116)
Running the reproduction in GDB and with breakpoints at clRetainContext, clReleaseContext, clRetainDevice, and clReleaseDevice, this is the output:
Thread 3 "example_reprodu" hit Breakpoint 1, 0x00007ffff6d5ae80 in clRetainContext () from /usr/lib/libOpenCL.so.1
(gdb) bt
#0 0x00007ffff6d5ae80 in clRetainContext () from /usr/lib/libOpenCL.so.1
#1 0x00007ffff70c4e3f in OPENCL_FN_clRetainContext_switch_fn (p1=0x5555556fed00) at /home/daniel/code/oss/opencv/modules/core/src/opencl/runtime/autogenerated/opencl_core_impl.hpp:546
#2 0x00007ffff708b4b5 in cv::ocl::Context::Impl::findOrCreateContext (h=0x5555556fed00) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:2512
#3 0x00007ffff708d5b1 in cv::ocl::Context::fromHandle (context=0x5555556fed00) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:3015
#4 0x00007ffff70827b2 in cv::ocl::OpenCLExecutionContext::Impl::Impl (this=0x7fffb8001a50, platformID=0x5555556d6190, context=0x5555556fed00, deviceID=0x5555556d6260) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:890
#5 0x00007ffff70c1cd1 in __gnu_cxx::new_allocator<cv::ocl::OpenCLExecutionContext::Impl>::construct<cv::ocl::OpenCLExecutionContext::Impl, _cl_platform_id*, _cl_context*, _cl_device_id*> (this=0x7fffd2c9f9bf, __p=0x7fffb8001a50)
at /usr/include/c++/11.1.0/ext/new_allocator.h:156
#6 0x00007ffff70c0c13 in std::allocator_traits<std::allocator<cv::ocl::OpenCLExecutionContext::Impl> >::construct<cv::ocl::OpenCLExecutionContext::Impl, _cl_platform_id*, _cl_context*, _cl_device_id*> (__a=..., __p=0x7fffb8001a50)
at /usr/include/c++/11.1.0/bits/alloc_traits.h:512
#7 0x00007ffff70bf594 in std::_Sp_counted_ptr_inplace<cv::ocl::OpenCLExecutionContext::Impl, std::allocator<cv::ocl::OpenCLExecutionContext::Impl>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<_cl_platform_id*, _cl_context*, _cl_device_id*> (this=0x7fffb8001a40, __a=...) at /usr/include/c++/11.1.0/bits/shared_ptr_base.h:519
#8 0x00007ffff70bd32f in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<cv::ocl::OpenCLExecutionContext::Impl, std::allocator<cv::ocl::OpenCLExecutionContext::Impl>, _cl_platform_id*, _cl_context*, _cl_device_id*> (
this=0x7fffd2c9fbe8, __p=@0x7fffd2c9fbe0: 0x0, __a=...) at /usr/include/c++/11.1.0/bits/shared_ptr_base.h:650
#9 0x00007ffff70babbd in std::__shared_ptr<cv::ocl::OpenCLExecutionContext::Impl, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<cv::ocl::OpenCLExecutionContext::Impl>, _cl_platform_id*, _cl_context*, _cl_device_id*> (
this=0x7fffd2c9fbe0, __tag=...) at /usr/include/c++/11.1.0/bits/shared_ptr_base.h:1337
#10 0x00007ffff70b742a in std::shared_ptr<cv::ocl::OpenCLExecutionContext::Impl>::shared_ptr<std::allocator<cv::ocl::OpenCLExecutionContext::Impl>, _cl_platform_id*, _cl_context*, _cl_device_id*> (this=0x7fffd2c9fbe0, __tag=...)
at /usr/include/c++/11.1.0/bits/shared_ptr.h:409
#11 0x00007ffff70b1eb9 in std::allocate_shared<cv::ocl::OpenCLExecutionContext::Impl, std::allocator<cv::ocl::OpenCLExecutionContext::Impl>, _cl_platform_id*, _cl_context*, _cl_device_id*> (__a=...)
at /usr/include/c++/11.1.0/bits/shared_ptr.h:861
#12 0x00007ffff70a94d1 in std::make_shared<cv::ocl::OpenCLExecutionContext::Impl, _cl_platform_id*, _cl_context*, _cl_device_id*> () at /usr/include/c++/11.1.0/bits/shared_ptr.h:877
#13 0x00007ffff708e52f in cv::ocl::OpenCLExecutionContext::create (platformName="Intel(R) OpenCL HD Graphics", platformID=0x5555556d6190, context=0x5555556fed00, deviceID=0x5555556d6260)
at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:3199
#14 0x0000555555556b8c in set_thread_global_opencl_context (platform=0x5555556d6190, device=0x5555556d6260, context=0x5555556fed00) at /home/daniel/code/oss/opencv/samples/reproduction/opencl-free.cpp:99
#15 0x0000555555556c93 in opencv_thread_entry (platform=0x5555556d6190, device=0x5555556d6260, context=0x5555556fed00) at /home/daniel/code/oss/opencv/samples/reproduction/opencl-free.cpp:106
#16 0x0000555555559174 in std::__invoke_impl<void, void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> (
__f=@0x5555557aa510: 0x555555556c66 <opencv_thread_entry(cl_platform_id, cl_device_id, cl_context)>) at /usr/include/c++/11.1.0/bits/invoke.h:61
#17 0x0000555555559040 in std::__invoke<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> (
__fn=@0x5555557aa510: 0x555555556c66 <opencv_thread_entry(cl_platform_id, cl_device_id, cl_context)>) at /usr/include/c++/11.1.0/bits/invoke.h:96
#18 0x0000555555558f37 in std::thread::_Invoker<std::tuple<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> >::_M_invoke<0ul, 1ul, 2ul, 3ul> (this=0x5555557aa4f8)
at /usr/include/c++/11.1.0/bits/std_thread.h:253
#19 0x0000555555558eb6 in std::thread::_Invoker<std::tuple<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> >::operator() (this=0x5555557aa4f8)
at /usr/include/c++/11.1.0/bits/std_thread.h:260
#20 0x0000555555558e9a in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> > >::_M_run (this=0x5555557aa4f0)
at /usr/include/c++/11.1.0/bits/std_thread.h:211
#21 0x00007ffff6c093c4 in std::execute_native_thread_routine (__p=0x5555557aa4f0) at /build/gcc/src/gcc/libstdc++-v3/src/c++11/thread.cc:82
#22 0x00007ffff7f6d259 in start_thread () from /usr/lib/libpthread.so.0
#23 0x00007ffff6a4d5e3 in clone () from /usr/lib/libc.so.6
(gdb) c
Continuing.
Thread 3 "example_reprodu" hit Breakpoint 2, 0x00007ffff6d61920 in clRetainDevice () from /usr/lib/libOpenCL.so.1
(gdb) bt
#0 0x00007ffff6d61920 in clRetainDevice () from /usr/lib/libOpenCL.so.1
#1 0x00007ffff70c4e64 in OPENCL_FN_clRetainDevice_switch_fn (p1=0x5555556d6260) at /home/daniel/code/oss/opencv/modules/core/src/opencl/runtime/autogenerated/opencl_core_impl.hpp:551
#2 0x00007ffff7086134 in cv::ocl::Device::Impl::Impl (this=0x7fffb8001d10, d=0x5555556d6260) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:1553
#3 0x00007ffff7086f90 in cv::ocl::Device::set (this=0x7fffd2c9f108, d=0x5555556d6260) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:1755
#4 0x00007ffff7086de1 in cv::ocl::Device::Device (this=0x7fffd2c9f108, d=0x5555556d6260) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:1707
#5 0x00007ffff708709f in cv::ocl::Device::fromHandle (d=0x5555556d6260) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:1764
#6 0x00007ffff708ab3c in cv::ocl::Context::Impl::init_device_list (this=0x7fffb8001b50) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:2421
#7 0x00007ffff708b541 in cv::ocl::Context::Impl::findOrCreateContext (h=0x5555556fed00) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:2514
#8 0x00007ffff708d5b1 in cv::ocl::Context::fromHandle (context=0x5555556fed00) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:3015
#9 0x00007ffff70827b2 in cv::ocl::OpenCLExecutionContext::Impl::Impl (this=0x7fffb8001a50, platformID=0x5555556d6190, context=0x5555556fed00, deviceID=0x5555556d6260) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:890
#10 0x00007ffff70c1cd1 in __gnu_cxx::new_allocator<cv::ocl::OpenCLExecutionContext::Impl>::construct<cv::ocl::OpenCLExecutionContext::Impl, _cl_platform_id*, _cl_context*, _cl_device_id*> (this=0x7fffd2c9f9bf, __p=0x7fffb8001a50)
at /usr/include/c++/11.1.0/ext/new_allocator.h:156
#11 0x00007ffff70c0c13 in std::allocator_traits<std::allocator<cv::ocl::OpenCLExecutionContext::Impl> >::construct<cv::ocl::OpenCLExecutionContext::Impl, _cl_platform_id*, _cl_context*, _cl_device_id*> (__a=..., __p=0x7fffb8001a50)
at /usr/include/c++/11.1.0/bits/alloc_traits.h:512
#12 0x00007ffff70bf594 in std::_Sp_counted_ptr_inplace<cv::ocl::OpenCLExecutionContext::Impl, std::allocator<cv::ocl::OpenCLExecutionContext::Impl>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<_cl_platform_id*, _cl_context*, _cl_device_id*> (this=0x7fffb8001a40, __a=...) at /usr/include/c++/11.1.0/bits/shared_ptr_base.h:519
#13 0x00007ffff70bd32f in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<cv::ocl::OpenCLExecutionContext::Impl, std::allocator<cv::ocl::OpenCLExecutionContext::Impl>, _cl_platform_id*, _cl_context*, _cl_device_id*> (
this=0x7fffd2c9fbe8, __p=@0x7fffd2c9fbe0: 0x0, __a=...) at /usr/include/c++/11.1.0/bits/shared_ptr_base.h:650
#14 0x00007ffff70babbd in std::__shared_ptr<cv::ocl::OpenCLExecutionContext::Impl, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<cv::ocl::OpenCLExecutionContext::Impl>, _cl_platform_id*, _cl_context*, _cl_device_id*> (
this=0x7fffd2c9fbe0, __tag=...) at /usr/include/c++/11.1.0/bits/shared_ptr_base.h:1337
#15 0x00007ffff70b742a in std::shared_ptr<cv::ocl::OpenCLExecutionContext::Impl>::shared_ptr<std::allocator<cv::ocl::OpenCLExecutionContext::Impl>, _cl_platform_id*, _cl_context*, _cl_device_id*> (this=0x7fffd2c9fbe0, __tag=...)
at /usr/include/c++/11.1.0/bits/shared_ptr.h:409
#16 0x00007ffff70b1eb9 in std::allocate_shared<cv::ocl::OpenCLExecutionContext::Impl, std::allocator<cv::ocl::OpenCLExecutionContext::Impl>, _cl_platform_id*, _cl_context*, _cl_device_id*> (__a=...)
at /usr/include/c++/11.1.0/bits/shared_ptr.h:861
#17 0x00007ffff70a94d1 in std::make_shared<cv::ocl::OpenCLExecutionContext::Impl, _cl_platform_id*, _cl_context*, _cl_device_id*> () at /usr/include/c++/11.1.0/bits/shared_ptr.h:877
#18 0x00007ffff708e52f in cv::ocl::OpenCLExecutionContext::create (platformName="Intel(R) OpenCL HD Graphics", platformID=0x5555556d6190, context=0x5555556fed00, deviceID=0x5555556d6260)
at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:3199
#19 0x0000555555556b8c in set_thread_global_opencl_context (platform=0x5555556d6190, device=0x5555556d6260, context=0x5555556fed00) at /home/daniel/code/oss/opencv/samples/reproduction/opencl-free.cpp:99
#20 0x0000555555556c93 in opencv_thread_entry (platform=0x5555556d6190, device=0x5555556d6260, context=0x5555556fed00) at /home/daniel/code/oss/opencv/samples/reproduction/opencl-free.cpp:106
#21 0x0000555555559174 in std::__invoke_impl<void, void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> (
__f=@0x5555557aa510: 0x555555556c66 <opencv_thread_entry(cl_platform_id, cl_device_id, cl_context)>) at /usr/include/c++/11.1.0/bits/invoke.h:61
#22 0x0000555555559040 in std::__invoke<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> (
__fn=@0x5555557aa510: 0x555555556c66 <opencv_thread_entry(cl_platform_id, cl_device_id, cl_context)>) at /usr/include/c++/11.1.0/bits/invoke.h:96
#23 0x0000555555558f37 in std::thread::_Invoker<std::tuple<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> >::_M_invoke<0ul, 1ul, 2ul, 3ul> (this=0x5555557aa4f8)
at /usr/include/c++/11.1.0/bits/std_thread.h:253
#24 0x0000555555558eb6 in std::thread::_Invoker<std::tuple<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> >::operator() (this=0x5555557aa4f8)
at /usr/include/c++/11.1.0/bits/std_thread.h:260
#25 0x0000555555558e9a in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> > >::_M_run (this=0x5555557aa4f0)
at /usr/include/c++/11.1.0/bits/std_thread.h:211
#26 0x00007ffff6c093c4 in std::execute_native_thread_routine (__p=0x5555557aa4f0) at /build/gcc/src/gcc/libstdc++-v3/src/c++11/thread.cc:82
#27 0x00007ffff7f6d259 in start_thread () from /usr/lib/libpthread.so.0
#28 0x00007ffff6a4d5e3 in clone () from /usr/lib/libc.so.6
(gdb) c
Continuing.
Thread 3 "example_reprodu" hit Breakpoint 4, 0x00007ffff6d61a40 in clReleaseDevice () from /usr/lib/libOpenCL.so.1
(gdb) bt
#0 0x00007ffff6d61a40 in clReleaseDevice () from /usr/lib/libOpenCL.so.1
#1 0x00007ffff70c4d3c in OPENCL_FN_clReleaseDevice_switch_fn (p1=0x5555556d6260) at /home/daniel/code/oss/opencv/modules/core/src/opencl/runtime/autogenerated/opencl_core_impl.hpp:511
#2 0x00007ffff7086fc0 in cv::ocl::Device::set (this=0x7fffd2c9f108, d=0x5555556d6260) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:1758
#3 0x00007ffff7086de1 in cv::ocl::Device::Device (this=0x7fffd2c9f108, d=0x5555556d6260) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:1707
#4 0x00007ffff708709f in cv::ocl::Device::fromHandle (d=0x5555556d6260) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:1764
#5 0x00007ffff708ab3c in cv::ocl::Context::Impl::init_device_list (this=0x7fffb8001b50) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:2421
#6 0x00007ffff708b541 in cv::ocl::Context::Impl::findOrCreateContext (h=0x5555556fed00) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:2514
#7 0x00007ffff708d5b1 in cv::ocl::Context::fromHandle (context=0x5555556fed00) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:3015
#8 0x00007ffff70827b2 in cv::ocl::OpenCLExecutionContext::Impl::Impl (this=0x7fffb8001a50, platformID=0x5555556d6190, context=0x5555556fed00, deviceID=0x5555556d6260) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:890
#9 0x00007ffff70c1cd1 in __gnu_cxx::new_allocator<cv::ocl::OpenCLExecutionContext::Impl>::construct<cv::ocl::OpenCLExecutionContext::Impl, _cl_platform_id*, _cl_context*, _cl_device_id*> (this=0x7fffd2c9f9bf, __p=0x7fffb8001a50)
at /usr/include/c++/11.1.0/ext/new_allocator.h:156
#10 0x00007ffff70c0c13 in std::allocator_traits<std::allocator<cv::ocl::OpenCLExecutionContext::Impl> >::construct<cv::ocl::OpenCLExecutionContext::Impl, _cl_platform_id*, _cl_context*, _cl_device_id*> (__a=..., __p=0x7fffb8001a50)
at /usr/include/c++/11.1.0/bits/alloc_traits.h:512
#11 0x00007ffff70bf594 in std::_Sp_counted_ptr_inplace<cv::ocl::OpenCLExecutionContext::Impl, std::allocator<cv::ocl::OpenCLExecutionContext::Impl>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<_cl_platform_id*, _cl_context*, _cl_device_id*> (this=0x7fffb8001a40, __a=...) at /usr/include/c++/11.1.0/bits/shared_ptr_base.h:519
#12 0x00007ffff70bd32f in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<cv::ocl::OpenCLExecutionContext::Impl, std::allocator<cv::ocl::OpenCLExecutionContext::Impl>, _cl_platform_id*, _cl_context*, _cl_device_id*> (
this=0x7fffd2c9fbe8, __p=@0x7fffd2c9fbe0: 0x0, __a=...) at /usr/include/c++/11.1.0/bits/shared_ptr_base.h:650
#13 0x00007ffff70babbd in std::__shared_ptr<cv::ocl::OpenCLExecutionContext::Impl, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<cv::ocl::OpenCLExecutionContext::Impl>, _cl_platform_id*, _cl_context*, _cl_device_id*> (
this=0x7fffd2c9fbe0, __tag=...) at /usr/include/c++/11.1.0/bits/shared_ptr_base.h:1337
#14 0x00007ffff70b742a in std::shared_ptr<cv::ocl::OpenCLExecutionContext::Impl>::shared_ptr<std::allocator<cv::ocl::OpenCLExecutionContext::Impl>, _cl_platform_id*, _cl_context*, _cl_device_id*> (this=0x7fffd2c9fbe0, __tag=...)
at /usr/include/c++/11.1.0/bits/shared_ptr.h:409
#15 0x00007ffff70b1eb9 in std::allocate_shared<cv::ocl::OpenCLExecutionContext::Impl, std::allocator<cv::ocl::OpenCLExecutionContext::Impl>, _cl_platform_id*, _cl_context*, _cl_device_id*> (__a=...)
at /usr/include/c++/11.1.0/bits/shared_ptr.h:861
#16 0x00007ffff70a94d1 in std::make_shared<cv::ocl::OpenCLExecutionContext::Impl, _cl_platform_id*, _cl_context*, _cl_device_id*> () at /usr/include/c++/11.1.0/bits/shared_ptr.h:877
#17 0x00007ffff708e52f in cv::ocl::OpenCLExecutionContext::create (platformName="Intel(R) OpenCL HD Graphics", platformID=0x5555556d6190, context=0x5555556fed00, deviceID=0x5555556d6260)
at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:3199
#18 0x0000555555556b8c in set_thread_global_opencl_context (platform=0x5555556d6190, device=0x5555556d6260, context=0x5555556fed00) at /home/daniel/code/oss/opencv/samples/reproduction/opencl-free.cpp:99
#19 0x0000555555556c93 in opencv_thread_entry (platform=0x5555556d6190, device=0x5555556d6260, context=0x5555556fed00) at /home/daniel/code/oss/opencv/samples/reproduction/opencl-free.cpp:106
#20 0x0000555555559174 in std::__invoke_impl<void, void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> (
__f=@0x5555557aa510: 0x555555556c66 <opencv_thread_entry(cl_platform_id, cl_device_id, cl_context)>) at /usr/include/c++/11.1.0/bits/invoke.h:61
#21 0x0000555555559040 in std::__invoke<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> (
__fn=@0x5555557aa510: 0x555555556c66 <opencv_thread_entry(cl_platform_id, cl_device_id, cl_context)>) at /usr/include/c++/11.1.0/bits/invoke.h:96
#22 0x0000555555558f37 in std::thread::_Invoker<std::tuple<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> >::_M_invoke<0ul, 1ul, 2ul, 3ul> (this=0x5555557aa4f8)
at /usr/include/c++/11.1.0/bits/std_thread.h:253
#23 0x0000555555558eb6 in std::thread::_Invoker<std::tuple<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> >::operator() (this=0x5555557aa4f8)
at /usr/include/c++/11.1.0/bits/std_thread.h:260
#24 0x0000555555558e9a in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> > >::_M_run (this=0x5555557aa4f0)
at /usr/include/c++/11.1.0/bits/std_thread.h:211
#25 0x00007ffff6c093c4 in std::execute_native_thread_routine (__p=0x5555557aa4f0) at /build/gcc/src/gcc/libstdc++-v3/src/c++11/thread.cc:82
#26 0x00007ffff7f6d259 in start_thread () from /usr/lib/libpthread.so.0
#27 0x00007ffff6a4d5e3 in clone () from /usr/lib/libc.so.6
(gdb) c
Continuing.
Thread 3 "example_reprodu" hit Breakpoint 3, 0x00007ffff6d5af90 in clReleaseContext () from /usr/lib/libOpenCL.so.1
(gdb) bt
#0 0x00007ffff6d5af90 in clReleaseContext () from /usr/lib/libOpenCL.so.1
#1 0x00007ffff70c4d17 in OPENCL_FN_clReleaseContext_switch_fn (p1=0x5555556fed00) at /home/daniel/code/oss/opencv/modules/core/src/opencl/runtime/autogenerated/opencl_core_impl.hpp:506
#2 0x00007ffff708e565 in cv::ocl::OpenCLExecutionContext::create (platformName="Intel(R) OpenCL HD Graphics", platformID=0x5555556d6190, context=0x5555556fed00, deviceID=0x5555556d6260)
at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:3200
#3 0x0000555555556b8c in set_thread_global_opencl_context (platform=0x5555556d6190, device=0x5555556d6260, context=0x5555556fed00) at /home/daniel/code/oss/opencv/samples/reproduction/opencl-free.cpp:99
#4 0x0000555555556c93 in opencv_thread_entry (platform=0x5555556d6190, device=0x5555556d6260, context=0x5555556fed00) at /home/daniel/code/oss/opencv/samples/reproduction/opencl-free.cpp:106
#5 0x0000555555559174 in std::__invoke_impl<void, void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> (
__f=@0x5555557aa510: 0x555555556c66 <opencv_thread_entry(cl_platform_id, cl_device_id, cl_context)>) at /usr/include/c++/11.1.0/bits/invoke.h:61
#6 0x0000555555559040 in std::__invoke<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> (
__fn=@0x5555557aa510: 0x555555556c66 <opencv_thread_entry(cl_platform_id, cl_device_id, cl_context)>) at /usr/include/c++/11.1.0/bits/invoke.h:96
#7 0x0000555555558f37 in std::thread::_Invoker<std::tuple<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> >::_M_invoke<0ul, 1ul, 2ul, 3ul> (this=0x5555557aa4f8)
at /usr/include/c++/11.1.0/bits/std_thread.h:253
#8 0x0000555555558eb6 in std::thread::_Invoker<std::tuple<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> >::operator() (this=0x5555557aa4f8)
at /usr/include/c++/11.1.0/bits/std_thread.h:260
#9 0x0000555555558e9a in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> > >::_M_run (this=0x5555557aa4f0)
at /usr/include/c++/11.1.0/bits/std_thread.h:211
#10 0x00007ffff6c093c4 in std::execute_native_thread_routine (__p=0x5555557aa4f0) at /build/gcc/src/gcc/libstdc++-v3/src/c++11/thread.cc:82
#11 0x00007ffff7f6d259 in start_thread () from /usr/lib/libpthread.so.0
#12 0x00007ffff6a4d5e3 in clone () from /usr/lib/libc.so.6
(gdb) c
Continuing.
Thread 3 "example_reprodu" hit Breakpoint 4, 0x00007ffff6d61a40 in clReleaseDevice () from /usr/lib/libOpenCL.so.1
(gdb) bt
#0 0x00007ffff6d61a40 in clReleaseDevice () from /usr/lib/libOpenCL.so.1
#1 0x00007ffff708e5ea in cv::ocl::OpenCLExecutionContext::create (platformName="Intel(R) OpenCL HD Graphics", platformID=0x5555556d6190, context=0x5555556fed00, deviceID=0x5555556d6260)
at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:3201
#2 0x0000555555556b8c in set_thread_global_opencl_context (platform=0x5555556d6190, device=0x5555556d6260, context=0x5555556fed00) at /home/daniel/code/oss/opencv/samples/reproduction/opencl-free.cpp:99
#3 0x0000555555556c93 in opencv_thread_entry (platform=0x5555556d6190, device=0x5555556d6260, context=0x5555556fed00) at /home/daniel/code/oss/opencv/samples/reproduction/opencl-free.cpp:106
#4 0x0000555555559174 in std::__invoke_impl<void, void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> (
__f=@0x5555557aa510: 0x555555556c66 <opencv_thread_entry(cl_platform_id, cl_device_id, cl_context)>) at /usr/include/c++/11.1.0/bits/invoke.h:61
#5 0x0000555555559040 in std::__invoke<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> (
__fn=@0x5555557aa510: 0x555555556c66 <opencv_thread_entry(cl_platform_id, cl_device_id, cl_context)>) at /usr/include/c++/11.1.0/bits/invoke.h:96
#6 0x0000555555558f37 in std::thread::_Invoker<std::tuple<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> >::_M_invoke<0ul, 1ul, 2ul, 3ul> (this=0x5555557aa4f8)
at /usr/include/c++/11.1.0/bits/std_thread.h:253
#7 0x0000555555558eb6 in std::thread::_Invoker<std::tuple<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> >::operator() (this=0x5555557aa4f8)
at /usr/include/c++/11.1.0/bits/std_thread.h:260
#8 0x0000555555558e9a in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(_cl_platform_id*, _cl_device_id*, _cl_context*), _cl_platform_id*, _cl_device_id*, _cl_context*> > >::_M_run (this=0x5555557aa4f0)
at /usr/include/c++/11.1.0/bits/std_thread.h:211
#9 0x00007ffff6c093c4 in std::execute_native_thread_routine (__p=0x5555557aa4f0) at /build/gcc/src/gcc/libstdc++-v3/src/c++11/thread.cc:82
#10 0x00007ffff7f6d259 in start_thread () from /usr/lib/libpthread.so.0
#11 0x00007ffff6a4d5e3 in clone () from /usr/lib/libc.so.6
(gdb) c
Continuing.
Thread 3 "example_reprodu" hit Breakpoint 3, 0x00007ffff6d5af90 in clReleaseContext () from /usr/lib/libOpenCL.so.1
(gdb) bt
#0 0x00007ffff6d5af90 in clReleaseContext () from /usr/lib/libOpenCL.so.1
#1 0x00007ffff708a64c in cv::ocl::Context::Impl::~Impl (this=0x7fffb8001b50, __in_chrg=<optimized out>) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:2389
#2 0x00007ffff708c7fa in cv::ocl::Context::Impl::release (this=0x7fffb8001b50) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:2670
#3 0x00007ffff708cd48 in cv::ocl::Context::release (this=0x7fffb8001a50) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:2888
#4 0x00007ffff708ccea in cv::ocl::Context::~Context (this=0x7fffb8001a50, __in_chrg=<optimized out>) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:2874
#5 0x00007ffff70c347d in cv::ocl::OpenCLExecutionContext::Impl::~Impl (this=0x7fffb8001a50, __in_chrg=<optimized out>) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:833
#6 0x00007ffff70c349d in __gnu_cxx::new_allocator<cv::ocl::OpenCLExecutionContext::Impl>::destroy<cv::ocl::OpenCLExecutionContext::Impl> (this=0x7fffb8001a50, __p=0x7fffb8001a50) at /usr/include/c++/11.1.0/ext/new_allocator.h:162
#7 0x00007ffff70c33c6 in std::allocator_traits<std::allocator<cv::ocl::OpenCLExecutionContext::Impl> >::destroy<cv::ocl::OpenCLExecutionContext::Impl> (__a=..., __p=0x7fffb8001a50) at /usr/include/c++/11.1.0/bits/alloc_traits.h:531
#8 0x00007ffff70c319e in std::_Sp_counted_ptr_inplace<cv::ocl::OpenCLExecutionContext::Impl, std::allocator<cv::ocl::OpenCLExecutionContext::Impl>, (__gnu_cxx::_Lock_policy)2>::_M_dispose (this=0x7fffb8001a40)
at /usr/include/c++/11.1.0/bits/shared_ptr_base.h:528
#9 0x00007ffff6e6fa78 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (this=0x7fffb8001a40) at /usr/include/c++/11.1.0/bits/shared_ptr_base.h:168
#10 0x00007ffff6e6f4e0 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count (this=0x7fffb8000ba0, __in_chrg=<optimized out>) at /usr/include/c++/11.1.0/bits/shared_ptr_base.h:702
#11 0x00007ffff707beaa in std::__shared_ptr<cv::ocl::OpenCLExecutionContext::Impl, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr (this=0x7fffb8000b98, __in_chrg=<optimized out>) at /usr/include/c++/11.1.0/bits/shared_ptr_base.h:1149
#12 0x00007ffff707bec6 in std::shared_ptr<cv::ocl::OpenCLExecutionContext::Impl>::~shared_ptr (this=0x7fffb8000b98, __in_chrg=<optimized out>) at /usr/include/c++/11.1.0/bits/shared_ptr.h:122
#13 0x00007ffff707bee2 in cv::ocl::OpenCLExecutionContext::~OpenCLExecutionContext (this=0x7fffb8000b98, __in_chrg=<optimized out>) at /home/daniel/code/oss/opencv/modules/core/include/opencv2/core/ocl.hpp:781
#14 0x00007ffff7156f20 in cv::CoreTLSData::~CoreTLSData (this=0x7fffb8000b90, __in_chrg=<optimized out>) at /home/daniel/code/oss/opencv/modules/core/src/precomp.hpp:325
#15 0x00007ffff7156f45 in cv::TLSData<cv::CoreTLSData>::deleteDataInstance (this=0x7fffb80018e0, pData=0x7fffb8000b90) at /home/daniel/code/oss/opencv/modules/core/include/opencv2/core/utils/tls.hpp:82
#16 0x00007ffff714db50 in cv::details::TlsStorage::releaseThread (this=0x555555571120, tlsValue=0x7fffb80010d0) at /home/daniel/code/oss/opencv/modules/core/src/system.cpp:1590
#17 0x00007ffff714e8e3 in cv::details::opencv_tls_destructor (pData=0x7fffb80010d0) at /home/daniel/code/oss/opencv/modules/core/src/system.cpp:1761
#18 0x00007ffff7f6c411 in __nptl_deallocate_tsd.part.0 () from /usr/lib/libpthread.so.0
#19 0x00007ffff7f6d27a in start_thread () from /usr/lib/libpthread.so.0
#20 0x00007ffff6a4d5e3 in clone () from /usr/lib/libc.so.6
(gdb) c
Continuing.
Thread 3 "example_reprodu" hit Breakpoint 4, 0x00007ffff6d61a40 in clReleaseDevice () from /usr/lib/libOpenCL.so.1
(gdb) bt
#0 0x00007ffff6d61a40 in clReleaseDevice () from /usr/lib/libOpenCL.so.1
#1 0x00007ffff7086a49 in cv::ocl::Device::Impl::~Impl (this=0x7fffb8001d10, __in_chrg=<optimized out>) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:1635
#2 0x00007ffff7086d8c in cv::ocl::Device::Impl::release (this=0x7fffb8001d10) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:1674
#3 0x00007ffff7086f32 in cv::ocl::Device::~Device (this=0x7fffb8003c30, __in_chrg=<optimized out>) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:1748
#4 0x00007ffff70bcc34 in std::_Destroy<cv::ocl::Device> (__pointer=0x7fffb8003c30) at /usr/include/c++/11.1.0/bits/stl_construct.h:140
#5 0x00007ffff70b9ec0 in std::_Destroy_aux<false>::__destroy<cv::ocl::Device*> (__first=0x7fffb8003c30, __last=0x7fffb8003c38) at /usr/include/c++/11.1.0/bits/stl_construct.h:152
#6 0x00007ffff70b5d77 in std::_Destroy<cv::ocl::Device*> (__first=0x7fffb8003c30, __last=0x7fffb8003c38) at /usr/include/c++/11.1.0/bits/stl_construct.h:185
#7 0x00007ffff70b046b in std::_Destroy<cv::ocl::Device*, cv::ocl::Device> (__first=0x7fffb8003c30, __last=0x7fffb8003c38) at /usr/include/c++/11.1.0/bits/alloc_traits.h:746
#8 0x00007ffff70b0a37 in std::vector<cv::ocl::Device, std::allocator<cv::ocl::Device> >::_M_erase_at_end (this=0x7fffb8001b80, __pos=0x7fffb8003c30) at /usr/include/c++/11.1.0/bits/stl_vector.h:1796
#9 0x00007ffff70a8951 in std::vector<cv::ocl::Device, std::allocator<cv::ocl::Device> >::clear (this=0x7fffb8001b80) at /usr/include/c++/11.1.0/bits/stl_vector.h:1499
#10 0x00007ffff708a6d5 in cv::ocl::Context::Impl::~Impl (this=0x7fffb8001b50, __in_chrg=<optimized out>) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:2392
#11 0x00007ffff708c7fa in cv::ocl::Context::Impl::release (this=0x7fffb8001b50) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:2670
#12 0x00007ffff708cd48 in cv::ocl::Context::release (this=0x7fffb8001a50) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:2888
#13 0x00007ffff708ccea in cv::ocl::Context::~Context (this=0x7fffb8001a50, __in_chrg=<optimized out>) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:2874
#14 0x00007ffff70c347d in cv::ocl::OpenCLExecutionContext::Impl::~Impl (this=0x7fffb8001a50, __in_chrg=<optimized out>) at /home/daniel/code/oss/opencv/modules/core/src/ocl.cpp:833
#15 0x00007ffff70c349d in __gnu_cxx::new_allocator<cv::ocl::OpenCLExecutionContext::Impl>::destroy<cv::ocl::OpenCLExecutionContext::Impl> (this=0x7fffb8001a50, __p=0x7fffb8001a50) at /usr/include/c++/11.1.0/ext/new_allocator.h:162
#16 0x00007ffff70c33c6 in std::allocator_traits<std::allocator<cv::ocl::OpenCLExecutionContext::Impl> >::destroy<cv::ocl::OpenCLExecutionContext::Impl> (__a=..., __p=0x7fffb8001a50) at /usr/include/c++/11.1.0/bits/alloc_traits.h:531
#17 0x00007ffff70c319e in std::_Sp_counted_ptr_inplace<cv::ocl::OpenCLExecutionContext::Impl, std::allocator<cv::ocl::OpenCLExecutionContext::Impl>, (__gnu_cxx::_Lock_policy)2>::_M_dispose (this=0x7fffb8001a40)
at /usr/include/c++/11.1.0/bits/shared_ptr_base.h:528
#18 0x00007ffff6e6fa78 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (this=0x7fffb8001a40) at /usr/include/c++/11.1.0/bits/shared_ptr_base.h:168
#19 0x00007ffff6e6f4e0 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count (this=0x7fffb8000ba0, __in_chrg=<optimized out>) at /usr/include/c++/11.1.0/bits/shared_ptr_base.h:702
#20 0x00007ffff707beaa in std::__shared_ptr<cv::ocl::OpenCLExecutionContext::Impl, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr (this=0x7fffb8000b98, __in_chrg=<optimized out>) at /usr/include/c++/11.1.0/bits/shared_ptr_base.h:1149
#21 0x00007ffff707bec6 in std::shared_ptr<cv::ocl::OpenCLExecutionContext::Impl>::~shared_ptr (this=0x7fffb8000b98, __in_chrg=<optimized out>) at /usr/include/c++/11.1.0/bits/shared_ptr.h:122
#22 0x00007ffff707bee2 in cv::ocl::OpenCLExecutionContext::~OpenCLExecutionContext (this=0x7fffb8000b98, __in_chrg=<optimized out>) at /home/daniel/code/oss/opencv/modules/core/include/opencv2/core/ocl.hpp:781
#23 0x00007ffff7156f20 in cv::CoreTLSData::~CoreTLSData (this=0x7fffb8000b90, __in_chrg=<optimized out>) at /home/daniel/code/oss/opencv/modules/core/src/precomp.hpp:325
#24 0x00007ffff7156f45 in cv::TLSData<cv::CoreTLSData>::deleteDataInstance (this=0x7fffb80018e0, pData=0x7fffb8000b90) at /home/daniel/code/oss/opencv/modules/core/include/opencv2/core/utils/tls.hpp:82
#25 0x00007ffff714db50 in cv::details::TlsStorage::releaseThread (this=0x555555571120, tlsValue=0x7fffb80010d0) at /home/daniel/code/oss/opencv/modules/core/src/system.cpp:1590
#26 0x00007ffff714e8e3 in cv::details::opencv_tls_destructor (pData=0x7fffb80010d0) at /home/daniel/code/oss/opencv/modules/core/src/system.cpp:1761
#27 0x00007ffff7f6c411 in __nptl_deallocate_tsd.part.0 () from /usr/lib/libpthread.so.0
#28 0x00007ffff7f6d27a in start_thread () from /usr/lib/libpthread.so.0
#29 0x00007ffff6a4d5e3 in clone () from /usr/lib/libc.so.6
(gdb) c
Continuing.
[Thread 0x7fffd2ca0640 (LWP 186393) exited]
[Switching to Thread 0x7fffef86cb80 (LWP 186304)]
Thread 1 "example_reprodu" hit Breakpoint 3, 0x00007ffff6d5af90 in clReleaseContext () from /usr/lib/libOpenCL.so.1
(gdb) bt
#0 0x00007ffff6d5af90 in clReleaseContext () from /usr/lib/libOpenCL.so.1
#1 0x0000555555556d08 in main () at /home/daniel/code/oss/opencv/samples/reproduction/opencl-free.cpp:130
(gdb) c
Continuing.
Thread 1 "example_reprodu" hit Breakpoint 4, 0x00007ffff6d61a40 in clReleaseDevice () from /usr/lib/libOpenCL.so.1
(gdb) bt
#0 0x00007ffff6d61a40 in clReleaseDevice () from /usr/lib/libOpenCL.so.1
#1 0x0000555555556d15 in main () at /home/daniel/code/oss/opencv/samples/reproduction/opencl-free.cpp:131
(gdb) c
Continuing.
[Thread 0x7fffedda3640 (LWP 186383) exited]
[Inferior 1 (process 186304) exited normally]
The docs for this function are a little confusing on this point: https://docs.opencv.org/4.5.2/d7/d83/classcv_1_1ocl_1_1OpenCLExecutionContext.html#a0c2c9987340f44950865b8ece48e2d34
They say it will "assign context to OpenCV and call clRetainContext function.", but also that "Lifetime of passed handles is transferred to OpenCV wrappers on success".
Issue submission checklist
- I report the issue, it's not a question
- I checked the problem with documentation, FAQ, open issues,
forum.opencv.org, Stack Overflow, etc and have not found solution - I updated to latest OpenCV version and the issue is still there
- There is reproducer code and related data files: videos, images, onnx, etc