Tracking GObjects
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_new
, g_object_ref
and
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!