boostorg / boostorg/compute

Segfault on program exit (with minimal sample)

Open
#836 6 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
1.7k
Forks
340
PR merge metrics
No merged PRs in 30d

Description

There seems to be an issue with current Nvidia and Intel platform (AMD does not seem to have this issue) when I compile Boost.Compute in a dynamic library; segfault is reported during some OpenCL resource cleanup while exiting. The interesting thing is if I statically link the same library this becomes a non-issue. **Update:** On MacOS it doesn't seem to have this issue

I am able to reproduce this issue with a few lines of code ([here](https://github.com/rosenrodt/bug_opencl_boost_compute)). The site raising the exception might be a bit different (at `program::~program()` or `command_queue::~command_queue()` or `context::~context()`) if I added or removed a few boost::compute APIs here and there.

Any thoughts on why this happens? I am hesitant to call this a Boost.Compute bug, but I have tried myself and I can't reproduce the problem in plain OpenCL API.

A few notes:
- The sample code uses exclusively default context and default command queue.
- Tested on Boost 1.68.0 and current master branch at `36c89134`
- OS: Win10

Full stack trace 1 (Nvidia platform)
```
ntdll.dll!00007ffc9a8ae771() Unknown
tmmon64.dll!00000000617a0f2b() Unknown
nvopencl64.dll!00007ffc22e84bac() Unknown
nvopencl64.dll!00007ffc22a49562() Unknown
nvopencl64.dll!00007ffc22a38ece() Unknown
nvopencl64.dll!00007ffc22a38329() Unknown
nvopencl64.dll!00007ffc22a2de83() Unknown
nvopencl64.dll!00007ffc22a2e365() Unknown
nvopencl64.dll!00007ffc22a37afa() Unknown
mylib.dll!boost::compute::context::~context() Line 162 C++
mylib.dll!`boost::compute::system::default_context'::`2'::`dynamic atexit destructor for 'default_context''() C++
ucrtbased.dll!00007ffc2fd30af7() Unknown
ucrtbased.dll!00007ffc2fd30545() Unknown
ucrtbased.dll!00007ffc2fd3064a() Unknown
ucrtbased.dll!00007ffc2fd30ca1() Unknown
mylib.dll!__scrt_dllmain_uninitialize_c() Line 392 C++
mylib.dll!dllmain_crt_process_detach(const bool) Line 109 C++
mylib.dll!dllmain_crt_dispatch(HINSTANCE__ * const, const unsigned long, void * const) Line 134 C++
mylib.dll!dllmain_dispatch(HINSTANCE__ * const, const unsigned long, void * const) Line 209 C++
mylib.dll!_DllMainCRTStartup(HINSTANCE__ * const, const unsigned long, void * const) Line 251 C++
ntdll.dll!00007ffc9a8e50e7() Unknown
ntdll.dll!00007ffc9a91068c() Unknown
ntdll.dll!00007ffc9a91053d() Unknown
tmmon64.dll!000000006170698c() Unknown
kernel32.dll!00007ffc9853d05a() Unknown
ucrtbased.dll!00007ffc2fd300da() Unknown
ucrtbased.dll!00007ffc2fd30099() Unknown
ucrtbased.dll!00007ffc2fd303d6() Unknown
myexe.exe!__scrt_common_main_seh() Line 275 C++
myexe.exe!__scrt_common_main() Line 309 C++
myexe.exe!mainCRTStartup() Line 17 C++
kernel32.dll!00007ffc98537e94() Unknown
ntdll.dll!00007ffc9a907ad1() Unknown
```

Full stack trace 2 (Nvidia platform)
```
ntdll.dll!00007ffc9a8ae771() Unknown
tmmon64.dll!00000000617a0f2b() Unknown
nvopencl64.dll!00007ffc22e84bac() Unknown
nvopencl64.dll!00007ffc22bbc79d() Unknown
nvopencl64.dll!00007ffc22bbc697() Unknown
nvopencl64.dll!00007ffc22a3c4a2() Unknown
nvopencl64.dll!00007ffc22a2de8d() Unknown
nvopencl64.dll!00007ffc22a2e365() Unknown
nvopencl64.dll!00007ffc22a3c2a8() Unknown
mylib.dll!boost::compute::command_queue::~command_queue() Line 219 C++
mylib.dll!`boost::compute::system::default_queue'::`2'::`dynamic atexit destructor for 'queue''() C++
ucrtbased.dll!00007ffc2fd30af7() Unknown
ucrtbased.dll!00007ffc2fd30545() Unknown
ucrtbased.dll!00007ffc2fd3064a() Unknown
ucrtbased.dll!00007ffc2fd30ca1() Unknown
mylib.dll!__scrt_dllmain_uninitialize_c() Line 392 C++
mylib.dll!dllmain_crt_process_detach(const bool) Line 109 C++
mylib.dll!dllmain_crt_dispatch(HINSTANCE__ * const, const unsigned long, void * const) Line 134 C++
mylib.dll!dllmain_dispatch(HINSTANCE__ * const, const unsigned long, void * const) Line 209 C++
mylib.dll!_DllMainCRTStartup(HINSTANCE__ * const, const unsigned long, void * const) Line 251 C++
ntdll.dll!00007ffc9a8e50e7() Unknown
ntdll.dll!00007ffc9a91068c() Unknown
ntdll.dll!00007ffc9a91053d() Unknown
tmmon64.dll!000000006170698c() Unknown
kernel32.dll!00007ffc9853d05a() Unknown
ucrtbased.dll!00007ffc2fd300da() Unknown
ucrtbased.dll!00007ffc2fd30099() Unknown
ucrtbased.dll!00007ffc2fd303d6() Unknown
myexe.exe!__scrt_common_main_seh() Line 275 C++
myexe.exe!__scrt_common_main() Line 309 C++
myexe.exe!mainCRTStartup() Line 17 C++
kernel32.dll!00007ffc98537e94() Unknown
ntdll.dll!00007ffc9a907ad1() Unknown
```

Full stack trace 3 (Intel platform)
```
ucrtbase.dll!00007ffc96b2f08e() Unknown
vcruntime140.dll!00007ffc87d94b16() Unknown
intelocl64.dll!00007ffc2a7625e0() Unknown
intelocl64.dll!00007ffc2a75618d() Unknown
mylib.dll!boost::compute::command_queue::~command_queue() Line 219 C++
mylib.dll!`boost::compute::system::default_queue'::`2'::`dynamic atexit destructor for 'queue''() C++
ucrtbased.dll!00007ffc2fd30af7() Unknown
ucrtbased.dll!00007ffc2fd30545() Unknown
ucrtbased.dll!00007ffc2fd3064a() Unknown
ucrtbased.dll!00007ffc2fd30ca1() Unknown
mylib.dll!__scrt_dllmain_uninitialize_c() Line 392 C++
mylib.dll!dllmain_crt_process_detach(const bool) Line 109 C++
mylib.dll!dllmain_crt_dispatch(HINSTANCE__ * const, const unsigned long, void * const) Line 134 C++
mylib.dll!dllmain_dispatch(HINSTANCE__ * const, const unsigned long, void * const) Line 209 C++
mylib.dll!_DllMainCRTStartup(HINSTANCE__ * const, const unsigned long, void * const) Line 251 C++
ntdll.dll!00007ffc9a8e50e7() Unknown
ntdll.dll!00007ffc9a91068c() Unknown
ntdll.dll!00007ffc9a91053d() Unknown
tmmon64.dll!000000006170698c() Unknown
kernel32.dll!00007ffc9853d05a() Unknown
ucrtbased.dll!00007ffc2fd300da() Unknown
ucrtbased.dll!00007ffc2fd30099() Unknown
ucrtbased.dll!00007ffc2fd303d6() Unknown
myexe.exe!__scrt_common_main_seh() Line 275 C++
myexe.exe!__scrt_common_main() Line 309 C++
myexe.exe!mainCRTStartup() Line 17 C++
kernel32.dll!00007ffc98537e94() Unknown
ntdll.dll!00007ffc9a907ad1() Unknown
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.