I stated before, that you have to release all OpenCL resources to prevent leaking buffer memory and eventually crashing the application. Now, it hit me again but wrapped in a GObject.
I didn’t know where exactly the problem was located but I suspected that a GObject wasn’t properly unreferenced and in the end finalized, hence leaking OpenCL resources. I knew there was a project to keep track of GObject references but I forgot the name.
Eventually, I found gobject-list again thanks to my Google super powers. Not only that, but it also helped debugging the problem in question. Now, what is gobject-list? It is a small library that is pre-load when running the application:
$ LD_PRELOAD=$PATH_TO/libgobject-list.so ./app ++ Created object 0x1ee3800, UfoConfig ++ Created object 0x1ee3840, UfoPluginManager ++ Created object 0x1ee5810, UfoResources
The library intercepts calls to
g_object_unref and logs them. By sending
SIGUSR1 to the application,
alive objects and reference counts can be queried:
$ killall -USR1 app Living Objects: - 0x1ee5810, UfoResources: 1 refs - 0x1ee3800, UfoConfig: 3 refs - 0x1ee3840, UfoPluginManager: 1 refs
More details can be found in the blog post by the original author. Big props to her!