Khronos Public Bugzilla
Bug 296 - cl.hpp: reference counting bug
cl.hpp: reference counting bug
Status: RESOLVED FIXED
Product: OpenCL
Classification: Unclassified
Component: Header Files
1.0
All All
: P3 normal
: ---
Assigned To: Neil Trevett
OpenCL Working Group
:
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2010-04-26 08:41 PDT by Markus Grabner
Modified: 2011-08-30 09:17 PDT (History)
2 users (show)

See Also:


Attachments
demonstrate reference counting bug (1.71 KB, text/plain)
2010-04-26 08:52 PDT, Markus Grabner
Details
proposed patch for reference counting bug (1.60 KB, patch)
2010-05-03 11:38 PDT, Markus Grabner
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Markus Grabner 2010-04-26 08:41:16 PDT
<Please comment on your experience with the C++ bindings to OpenCL 1.0 here,
including any bugs you encounter as well as suggestions for improvement. If
you are having problems, please try to provide a complete example including
source code demonstrating the problem as well as describing the OS, C++
compiler, and compiler options used.>
Comment 1 Markus Grabner 2010-04-26 08:51:28 PDT
(In reply to comment #0)
> <Please comment on your experience with the C++ bindings to OpenCL 1.0 here,
> including any bugs you encounter as well as suggestions for improvement. If
> you are having problems, please try to provide a complete example including
> source code demonstrating the problem as well as describing the OS, C++
> compiler, and compiler options used.>

Sorry, didn't expect that clicking the back button discards the text, so here it is:

cl::CommandQueue::getInfo<CL_QUEUE_CONTEXT>() doesn't increase the reference count of the cl::Context object returned by this method. This results in a program crash when the destructur is called for the unreferenced instance. The problem probably exists for other getInfo<...> variants since the code is shared.

This file demonstrates the problem. The program crashes in ReferenceHandler<cl_context>::release(), which is invoked from cl::Context::~Context(). If the context's reference count is increased explicitly (by setting "#if 1" in line 47), the program finishes without error.
Comment 2 Markus Grabner 2010-04-26 08:52:30 PDT
Created attachment 40 [details]
demonstrate reference counting bug
Comment 3 Benedict Gaster 2010-04-26 10:40:45 PDT
This is a known problem and something we are working on, unlike many of the other bugs it does not have a straightforward solution.
Comment 4 Markus Grabner 2010-04-27 03:26:53 PDT
I see. Is there a public discussion on this issue elsewhere? I would like to contribute since the workaround I'm currently using is quite ugly :-)
Comment 5 Benedict Gaster 2010-04-27 10:41:10 PDT
There is general discussion of the C++ bindings on the OpenCL forum here:

http://www.khronos.org/message_boards/viewtopic.php?f=28&t=1415
Comment 6 Markus Grabner 2010-05-03 11:38:03 PDT
Created attachment 41 [details]
proposed patch for reference counting bug

This is a proposed patch for this issue:
*) define a template function "fixReferenceCount()" which does nothing
*) overload this function for all relevant types (e.g., cl::Context), and call their retain() method
*) call "fixReferenceCount()" for data returned by the native OpenCL functions (in GetInfoHelper::get())
Comment 7 Sebastian Schuberth 2011-01-07 07:08:21 PST
This post says reference counting was fixed:

http://www.khronos.org/message_boards/viewtopic.php?p=7692#p7692

Can the OP confirm?
Comment 8 Benedict Gaster 2011-08-30 09:17:08 PDT
Reference counting is fixed and so closing.